Android Tablayout для viewpager с динамической высотой в appbarlayout - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу создать табуляцию для viewpager, такую ​​как страница исследования Instagram (вкладка поиска); при повторной прокрутке в окне повторного просмотра высота изменения табуляции изменяется в режиме мгновенной прокрутки; но когда я отслеживаю прокрутку просмотра и изменяю высоту табуляции в зависимости от dy, просмотр реселлера имеет некоторую задержку и до тех пор, пока раскладка панели приложения не свернута, dy из реселлера видит 0, и я не могу изменить высоту табуляции; код для пользовательской вкладки tablayout:

<android.support.v7.widget.CardView
    android:id="@+id/cv_image_wrapper"
    android:layout_width="80dp"
    android:layout_height="match_parent"
    app:cardCornerRadius="10dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.AppCompatImageView
            android:id="@+id/img_tab_icon"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:adjustViewBounds="true"
            android:scaleType="center" />
        <android.support.v7.widget.AppCompatTextView
            android:id="@+id/txt_tab_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:fontFamily="@font/iran_sans"
            android:maxLines="1"
            android:textColor="@color/colorAccent"
            android:textSize="16sp"
            app:fontFamily="@font/iran_sans"
            tools:text="@string/sample" />


    </RelativeLayout>
</android.support.v7.widget.CardView>

код для appbarlayout:

<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/small_margin"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
>

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/toolbar_height"

    android:contentInsetLeft="@dimen/standard_margin"
    android:contentInsetStart="@dimen/standard_margin"
    app:contentInsetLeft="@dimen/standard_margin"
    app:contentInsetStart="@dimen/standard_margin"
    android:contentInsetRight="@dimen/standard_margin"
    android:contentInsetEnd="@dimen/standard_margin"
    app:contentInsetRight="@dimen/standard_margin"
    app:contentInsetEnd="@dimen/standard_margin"
    app:layout_scrollFlags="scroll|enterAlways"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v7.widget.AppCompatEditText
            android:id="@+id/et_search_term"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/search_box_bg"
            android:drawableRight="@drawable/ic_action_search_icon"
            android:hint="@string/search"
            android:imeOptions="actionSearch"
            android:inputType="text"
            android:maxLines="1"
            android:paddingLeft="@dimen/half_margin"
            android:paddingRight="@dimen/half_margin"
            android:textSize="@dimen/normal_font_size"
            />
    </LinearLayout>
</android.support.v7.widget.Toolbar>

<android.support.design.widget.TabLayout
    android:id="@+id/tl_explore_pages"
    android:layout_width="match_parent"
    android:layout_height="@dimen/explore_tab_layout_height"
    android:hapticFeedbackEnabled="true"
    app:tabGravity="center"
    app:tabIndicatorHeight="1dp"
    app:tabPaddingBottom="@dimen/small_margin"
    app:tabPaddingEnd="@dimen/standard_margin"
    app:tabPaddingStart="@dimen/standard_margin"
    app:tabPaddingTop="-1dp"
    app:tabMaxWidth="0dp"
    app:tabMode="scrollable"
    app:tabSelectedTextColor="@color/colorAccent"
    app:tabTextColor="@android:color/white"
    app:tabTextAppearance="@android:style/TextAppearance.Widget.TabWidget"
    />

код для изменения высоты табуляции:

@Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tlExplorePage.getLayoutParams();

            int defaultHeight = getResources().getDimensionPixelSize(R.dimen.explore_tab_layout_height);
            int oldHeight = params.height;
            int newHeight = defaultHeight;
            if (dy > 0 && params.height >= defaultHeight / 2) {
                int height = params.height - (Math.abs(dy));
                params.height = height < defaultHeight / 2 ? defaultHeight / 2 : height;
                newHeight = height < defaultHeight / 2 ? defaultHeight / 2 : height;
            } else if (dy < 0 && params.height <= defaultHeight) {
                int height = params.height + Math.abs(dy);
                params.height = height > defaultHeight ? defaultHeight : height;
                newHeight = height > defaultHeight ? defaultHeight : height;
            }
             tlExplorePage.setLayoutParams(params);
        }

код для режима snapp:

@Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (newState == RecyclerView.SCROLL_STATE_IDLE) {
                LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tlExplorePage.getLayoutParams();
                int defaultHeight = getResources().getDimensionPixelSize(R.dimen.toolbar_height);
                appBarLayout.setExpanded((appBarLayout.getHeight() - appBarLayout.getBottom()) == 0, true);
            }
        }

я внедряю прослушиватель прокрутки, закодированный внутри страницы исследования, для просмотра повторного просмотра в viewpager при изменении страницы

также, когда я устанавливаю флажки прокрутки на snapp, задержка просмотра повторов очень велика, потому что я создал ручной режим привязки, когда прокрутка закончена; как я могу изменить этот код, чтобы он работал точно так же, как Instagram?

...