アクティビティをロードするさまざまなタブを持つタブアクティビティであるアプリケーションがあります。タブコントロール自体とタブにロードされた各アクティビティの両方で、スワイプジェスチャを追加してタブを切り替えたいと思います。このようなことは可能ですか?タブコントロールでホストされているアクティビティでジェスチャを実行しているとき、または内部アクティビティがタブホストにデータを渡す必要があるかどうかにかかわらず、ジェスチャがどの「深さ」でリッスンされるかはわかりません。
2 に答える
それは確かに可能です。カスタムレイアウトを作成し、onTouchEventとonInterceptTouchEventをオーバーライドして、ジェスチャを子にディスパッチするかどうかを決定する必要があります。これを行う方法の詳細については、 HorizontalPagerのソースを参照してください。スクロールするコンテンツにより、タブ間をスワイプできることがはるかに明確になると思うので、実際には、HorizontalPagerをまっすぐに使用することをお勧めします(タブのシミュレーションに関するデモがあります)。
ジェスチャ検出器を使用できます。私の知る限り、それは「グローバルに」ジェスチャーを聞きます。タブに制限するには、ジェスチャがタブの境界内で発生したかどうかを確認できます。
GestureDetector
提供されたMotionEventsを使用して、さまざまなジェスチャとイベントを検出します。GestureDetector.OnGestureListenerコールバックは、特定のモーションイベントが発生したときにユーザーに通知します。このクラスは、タッチで報告されたMotionEventsでのみ使用する必要があります(トラックボールイベントには使用しないでください)。このクラスを使用するには:
- ビューのGestureDetectorのインスタンスを作成します。nTouchEvent(MotionEvent)メソッドで、必ず呼び出します。
- onTouchEvent(MotionEvent)。コールバックで定義されたメソッドは、イベントが発生したときに実行されます
ソース:http ://developer.android.com/reference/android/view/GestureDetector.html
スワイプジェスチャ
このページは、GestureDetectorを使用してスワイプジェスチャを認識する方法を示しています: http ://smartandroidians.blogspot.com/2010/04/swipe-action-and-viewflipper-in-android.html