2011-02-01 13 views
1

次のシナリオを考えます。ビューグループと2つのビュー(1つは矩形、もう1つは楕円形)ビューグループと2つのビューは、OnTouchListenerインターフェイスを実装します。しかし、ビューをタッチすると、Viewgroup.onTouch(..)とRectView.onTouch()とOvalView.onTouch()の両方が呼び出されます。私の質問は..もし私が何をする必要があるのか​​知りたいのですが?いくつかの情報や例を教えてください。事前にViewGroupのビュー

おかげで、

答えて

0

さて、OnTouchListenerを見てみましょう。

onTouch(View、MotionEvent)は、イベントを消費した場合にブール値を返します。そのことを念頭に置いて、数学を行い、RectViewまたはOvalViewにtouchイベントが含まれているかどうかを確認したいと考えています(X、Y座標を取得するためにMotionEventを使用)。それが含まれている場合は、そのビューがタッチイベントを消費したことを示すためにtrueを返します。

それぞれのonTouch()が呼び出される順番は明確ではありませんが、最初に子ビューを呼び出すと仮定します。子ビューがfalseを返した場合は、残りのonTouch )メソッド。

RectViewまたはOvalViewをタッチした場合(たとえ理論的には同時にタッチすることができるなど)を区別することが重要な場合は、どちらを受け入れるかを確認するために何らかの追加作業を行う必要がありますもう片方の上に)。

+0

ありがとうございます。 – Blackbelt

+0

申し訳ありませんが、View.OnTouchListenerのonTouchの最初の引数はどうですか? – Blackbelt

+0

私はそれがOnTouchListenerが呼び出されているビューだと信じていますが、それを確認したいかもしれません。チェックするのは簡単でしょう。すべてのonTouch()メソッドが呼び出されている場合は、そこにデバッグポイントを置き、受け取った各Viewオブジェクトが一意であることを確認します。それらがすべて同じであれば、それはあなたと関連性があるかもしれません。 – OEP

0

タッチイベントを受信したビューのIDを取得できます。

public boolean onTouch(View v, MotionEvent event) { 
     v.getId(); 
} 

ビューのIDをxmlで設定することも、setId()メソッドを使用して設定することもできます。

関連する問題