リストビューの touchevent 処理を無効にする必要がありますが、その子がクリックを受け取ることを許可します。マップビューとその上にリストビューがあるフレームレイアウトがあります。リストが空の場合は、マップですべてのタッチ イベントを処理する必要がありますが、リストがいっぱいになった場合は、リスト項目がクリック イベントを受け取るようにします。
1 に答える
onInterceptTouchEvent(): http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)を使用して、カスタム FrameLayout (ルート ViewGroup) 内のすべてのタッチ イベントをインターセプトできます。
ここで行うことは、MotionEvent.ACTION_DOWN イベントをキャプチャし、ListView が空 (タッチが MapView に移動) であるか、塗りつぶされて ListView の境界内にあるか (タッチが移動) に応じて、イベントが ListView または MapView のどちらを対象としているかを決定することです。 ListView に)。どちらの場合も true を返し、onTouchEvent() で次の ACTION_DOWN イベントをキャプチャします (まだ FrameLayout)。そうすれば、ACTION_CANCEL までのすべてのタッチ イベントが FrameLayout の onTouchEvent() に送られます。
FrameLayout の onTouchEvent() は、すべてのタッチ イベントを ListView または MapView にディスパッチします。どのビューがイベントを取得するかは onInterceptTouchEvent() で決定されているため、その決定の結果を何らかの形で保存する必要があります。その決定は、ACTION_DOWN と ACTION_POINTER_UP、ACTION_UP、ACTION_CANCEL イベントの間で有効です。
リスト項目を選択しない空でない ListView のすべてのタッチ イベント (フリング、スクロールなど) を無効にするかどうかわかりません。それは問題をかなり複雑にするからです。ListView のビューポートに適合しないリスト項目は上下にスクロールできないため、クリックできなかったため、ユーザーの観点からは意味がないと思いますが。
これが簡単に機能するとは思わないでください。モーション イベントのフローと、onInterceptTouchEvent() と onTouchEvent() の間の相互作用を理解することは困難ですが、それをさらに機能させることは困難です。しかし、これがあなたの問題を解決するための実行可能な方法であると確信しています。