NavigationDrawer 和 ViewPager 之间的手势冲突

Gesture conflicts between NavigationDrawer and ViewPager

我有一个 NavigationDrawerActivity 布局如下:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_drawerlayout"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/drawer_framelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ListView
        android:id="@+id/drawer_listview"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@color/transparent"
        android:dividerHeight="0dp"
        android:background="@color/navigationDrawerBackgroundColor" />

</android.support.v4.widget.DrawerLayout>

FrameLayoutFragment 替换,这是当前从 NavigationDrawerListView 中选择的项目。

显示效果很好,NavigationDrawer效果很好,但是当Fragment包含一个带指标的ViewPager时,如:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1.0" />

    <me.shkschneider.skeleton.ui.viewpager.ViewPagerCircleIndicator
        android:id="@+id/viewpagercircleindicator"
        android:layout_width="match_parent"
        android:layout_height="@dimen/spaceSmallish" />

</LinearLayout>

当我尝试向后(向左)滑动时,我(主要是)出现了奇怪的行为:ViewPager 内的 View 滑动了一半的距离,然后重置到它的位置,很难滑动到上一个 Fragment.

我注意到只有当我的手指起点在屏幕左侧(NavigationDrawer 所在的位置)时才会发生这种情况,但是我没有看到任何 NavigationDrawer 移动.

这发生在我的 Nexus 5 运行 Android 5.0.1 和我的 Moto X 运行 Android 4.4.4.

  1. 这两个 UI 元素真的兼容吗?
  2. 我是否遗漏了一个 Listener 或一些可以防止这种行为的东西/如何避免它?

我使用 Android 设计库以不同的方式实现了这个,现在这个问题已经消失了。

https://developer.android.com/training/implementing-navigation/nav-drawer.html