SlidingMenuとSwipeBackLayoutの右滑りイベントの競合問題の解決

2300 ワード

SwipeBackLayoutは右にスライドして現在のActivityを閉じ、SlidingMenuは右にスライドしてmenu部分を開きます.同じActivityでは、SlidingMenuが開いているときに右にスライドすると、イベントがSwipeBackLayoutによって優先され、画面の大部分がmenuで、一部がActivityコンテンツのときに現在のActivityを直接閉じてしまうのは明らかです.これはユーザが望んでいるものではない(SlidingMenuが開いている場合、右スライドが対応するSlidingMenuである場合、ゆっくり閉じてから右スライドすると、SwipeBackLayoutに応答して現在のActivityを閉じ、SlidingMenuが閉じている場合、SwipeBackLayoutに直接応答する).
SlidingMenuとSwipeBackLayoutはそれぞれ独自の状態を有しており、できるだけ結合するために以下の処理を行うことができる(現在のActivityでdispatchTouchEventを直接書き換え、SlidingMenuの状態に応じてSwipeBackLayoutの利用可能な状態を設定する).
 1 @Override  2 public boolean dispatchTouchEvent(MotionEvent ev) {  3     if (menu.isMenuShowing()) {  4         if (mSwipeBackLayout.getEnableGesture()) {  5             mSwipeBackLayout.setEnableGesture(false);  6  }  7     } else {  8         if (!mSwipeBackLayout.getEnableGesture()) {  9             mSwipeBackLayout.setEnableGesture(true); 10  } 11  } 12     return super.dispatchTouchEvent(ev); 13 }