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の利用可能な状態を設定する).
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 }