2013-07-26 49 views
9

Tôi có một ứng dụng Android với một Hoạt động. Hoạt động này sử dụng cách bố trí này:Cử chỉ không hoạt động khi sử dụng DrawerLayout trong ứng dụng Android

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

    <!-- The main content view --> 
    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <!-- The navigation drawer --> 
    <ListView android:id="@+id/left_drawer" 
     android:layout_width="240dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="0dp" 
     android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

Sau đó, trong nguồn của tôi Tôi có hai máy dò cử chỉ được định nghĩa trong constructor:

mDetector = new GestureDetectorCompat(this, new CustomGestureListener()); 
mScaleDetector = new ScaleGestureDetector(this, new CustomScaleGestureListener()); 

Và tôi trọng onTouchEvent theo cách này:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getPointerCount() > 1) { 
     this.mScaleDetector.onTouchEvent(event); 
    } else { 
     this.mDetector.onTouchEvent(event); 
    } 
    return super.onTouchEvent(event); 
} 

Vấn đề của tôi là cử chỉ không được phát hiện (mặc dù tôi có thể mở ngăn kéo bằng cử chỉ vuốt). Vấn đề này không xảy ra nếu tôi thay thế drawerlayout bằng, ví dụ, một layout tuyến tính, do đó nguyên nhân là ngăn điều hướng. Tôi đang làm gì sai?

+0

Bạn đã nhận được giải pháp cho vấn đề này chưa? – owe

+0

Tôi đã không có thời gian để kiểm tra giải pháp @vivoila nhưng tôi sẽ làm điều đó vào tuần tới. Tôi sẽ kể cho bạn vài thứ. –

+0

Tôi gặp vấn đề tương tự: http://stackoverflow.com/questions/21040150/drawerlayout-prevents-call-of-mainactivity-ontouchevent#comment31631959_21040150. Trước khi tôi thực hiện các cập nhật trong câu hỏi của tôi, tôi đã thử nghiệm giải pháp @vivoila nhưng điều này không hiệu quả đối với tôi. – owe

Trả lời

1

bạn phải đặt TouchListener cho bố cục ngăn kéo của mình. ví dụ:/

gestureDetector = new GestureDetector(this, new CustomGestureListener()); 

    mDrawerLayout.setOnTouchListener(new View.OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      if (gestureDetector.onTouchEvent(event)) { 
       return true; 
      } 
      return false; 
     } 
    });