Android CollapsingToolbarLayout с viewPager отскакивает при прокрутке - PullRequest
0 голосов
/ 22 октября 2018

Я вставил viewPager в CollapsingToolbarLayout.

Это работает, но когда я быстро прокручиваю, CollasingToolbarLayout отскакивает вверх ногами.Если я прокручиваю быстро, это работает так, как я ожидал.Мой xml-код такой, как показано ниже

<CoordinatoreLayout>

    <!-- body -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <!--Contents such as scrollview or recyclerview-->

    </RelativeLayout>

    <AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

                <CollapsingToolbarLayout
                      android:id="@+id/collapsing_toolbar"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                      app:contentScrim="@color/colorBlack"
                      app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

                      <FrameLayout
                            android:layout_width="match_parent"
                            android:layout_height="482dp"
                            app:layout_collapseMode="parallax">

                            <android.support.v4.view.ViewPager
                                     android:id="@+id/viewPager"
                                     android:layout_width="match_parent"
                                     android:layout_height="match_parent" />

                      </FrameLayout>
           </CollapsingToolbarLayout>

     </AppBarLayout>

</CoordinatorLayout>

Я пробовал каждый флаг, который могу проверить на приведенном выше коде, но ничего не получалось.ViewPager состоит из нескольких картинок.

Я думал, что событие горизонтальной прокрутки viewPager что-то делает.Итак, я создал подкласс для AppbarLayout и CollapsingToolbarLayout, который переопределяет onTouchEvent.

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    switch (ev.getAction()) {
        case MotionEvent.ACTION_DOWN:
            xDistance = yDistance = 0f;
            lastX = ev.getX();
            lastY = ev.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            final float curX = ev.getX();
            final float curY = ev.getY();
            xDistance += Math.abs(curX - lastX);
            yDistance += Math.abs(curY - lastY);
            lastX = curX;
            lastY = curY;
            if (xDistance > yDistance)
                return false;
    }

    return super.onInterceptTouchEvent(ev);
}

Но это также не решило проблему.Что я должен попробовать дальше?

...