我已经在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);
}
但是,它也没有解决问题。接下来我应该尝试什么?