Я вставил 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);
}
Но это также не решило проблему.Что я должен попробовать дальше?