2015-01-26 5 views
0

Как разделить события, которые должны прокручивать мой ScrollView и события, которые должны управлять NavigationDrawer? Теперь NavigationDrawer ловит все TouchEvent.HorizontalScrollView в NavigationDrawerFragment

fragment_navigation_drawer.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/bg_grey" 
    android:gravity="center_horizontal" 
    android:orientation="vertical"> 

    <HorizontalScrollView 
     android:layout_width="match_parent" 
     android:id="@+id/hScrollView" 
     android:layout_height="200dp"> 

     <LinearLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal"> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:src="@drawable/ic_launcher" /> 
     </LinearLayout> 
    </HorizontalScrollView> 



    <View 
     android:id="@+id/id10" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 


    <TextView 
     android:gravity="bottom" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" /> 

</LinearLayout> 

activity_main.xml

<android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <include layout="@layout/toolbar" /> 

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


     </LinearLayout> 

     <fragment 
      android:id="@+id/navigation_drawer" 
      android:name="com.company.example.NavigationDrawerFragment" 
      android:layout_width="288dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      tools:layout="@layout/fragment_navigation_drawer" /> 

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

HorizontalScrollView может быть не лучшим решением для использования в NavigationDrawer, но ...

ответ

0
navigationDrawer.requestDisallowInterceptTouchEvent(false); 

Поместите код, приведенный выше после открытия навигационного ящика и поместите следующий код после закрытия vigation ящик

drawerLayout.requestDisallowInterceptTouchEvent(true); 
1

Если вы готовы отказаться от «салфетки, чтобы закрыть» функцию выдвижного ящика можно запереть ящик при открытии. Это означает, что пользователь не сможет закрыть ящик с помощью салфетки, но прокрутка внутри HorizontalScrollView будет работать должным образом.

Блокирующий достигается путем вызова

mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);

Удобное место для этого вызова будет в onDrawerOpened.

К сожалению, блокировка также предотвращает закрытие ящика, когда пользователь удаляет холст (тусклая часть экрана, не занятая выдвижным ящиком). Вам нужно поймать этот кран и закрыть его самостоятельно, с чем-то вроде этого:

mDrawerLayout.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     int x = (int) event.getX(); 
     int drawerWidth = (int)getResources().getDimension(R.dimen.your_drawer_width); 
     if (x > drawerWidth) { 
      // inside scrim 
      mDrawerLayout.closeDrawer(); 
      return true; 
     } 
     return false; 
    } 
}); 
+0

У вас есть решение, если разработчик не готов отказаться от «проведите по экрану»? Pozdrav. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^