はViewGroupでイベントを処理するときに、どの子ビューがタッチされたのか判断できますか?
LinearLayoutA <-- I want to handle the touches here...
|
+-SomeViewX
+-SomeOtherViewY
+-LinearLayoutB
|
+-CustomView1 <-- for these three CustomView objects
+-CustomView2
+-CustomView3
すると私は何をしたいのは手を触れた(壮大な)子ビューを知っているとLinearLayoutA内からそれを処理です...この仮想的な階層構造を考えてみましょう。また、私はこれらのビューを制御しないので、単に内部的にタッチを処理して親に代理することはできません。
現在、CustomViews 1-3に手動でタッチリスナーを追加していますが、これには多くの「定型文」が必要です。また、SomeViewXまたはSomeOtherViewYをクリックした場合に通知を受け取らないことを意味します。リスナーを添付しました。
C#やWPFなどの他の言語では、LinearLayoutAに相当するイベントを処理すると、イベントペイロードの一部がソースになりますが、これはタッチを開始したビューですが、わかりませんAndroidでのこのようなこと。
私が見たすべての例では、子供をループしてヒットテストし、重なりがある場合はzオーダーで曖昧さを取り除き、子供を特定したら、子供と繰り返し。
したがって、手動で繰り返しやヒットテストを行わずにViewGroup内のどの子がタッチされたのか、またはすべての子にリスナーを手作業で取り付けることなく、「Androidy」の方法がありますか?
OnTouchListenerは、3つのオブジェクトすべてに対して同じリスナを使用し、引数を調べることでどれがヒットしたのかを知るために、 'View'をパラメータとして取り込みます。しかし、これは依然として手動で単一のリスナーを付加する必要があります。 –
ええ、リスナーを手作業で取り付けるのは、私が避けようとしていたものでした。特に、それらのビューの一部が自分のコントロールの外や動的に作成されていたからです。だから私は正しかったということを意味します...デフォルトのイベント経路を使ってタップイベントのソースビューを知る方法はありませんか? – MarqueIV
あなたはビューをコントロールしていないので、リスナーをどこかに付ける必要があると思いますが、単一の 'OnTouchListener'オブジェクトを再利用すると、比較的苦労するはずです。 –