滚动时会弹出带有viewPager的Android CollapsingToolbarLayout

时间:2018-10-22 10:09:02

标签: android android-coordinatorlayout android-collapsingtoolbarlayout

我已经在CollapsingToolbarLayout中插入了一个viewPager。

它可以工作,但是当我快速滚动时,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);
}

但是,它也没有解决问题。接下来我应该尝试什么?

0 个答案:

没有答案