2011-02-10 18 views
10

複数のビューから同時にMotionEventをキャプチャする必要があるアプリケーションを開発しています。私たちがそうしようとすると、Androidは最初にタッチされたビューにイベントをディスパッチし、別のビューに同時にタッチすると、ポインタ座標がその境界の外側にあり、他のビューの内側にある場合でもACTION_POINTER_DOWN 。複数のビューOnTouchイベント

タッチしたすべてのビュー(OnTouchを別々に呼び出して)にイベントを送出する方法はありますか?

親ビューからタッチイベントを傍受し、それを手動で各ビューにディスパッチすることは効果的かもしれませんが、そうしても、達成しようとしているものについては実用的ではありません。簡単な方法がありますか?

答えて

6

タッチイベントは、現在フォーカスのあるビューで最初にキャッチされます。あなたが1つのビューに触れ、 "消費した"イベントを持っていて、それを使って作業している場合、クリックした場所に関係なく、このビューに他のイベントがディスパッチされます。

touchListenerからfalseを返すと(つまり、イベントは消費されないと言います)、他のビューに委任されますが、別の別のクリックで新しいイベントが別のビューに送出されます。

http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-3-understanding-touch-events/1775

http://developer.android.com/guide/topics/ui/ui-events.html

+1

私は同じ問題を抱えています。つまり、画面上に残っている場所にタッチするとフォーカスが移動します。これで助けてくれますか? –

10

3.0少なくともAndroidの複数のビュー間で分割タッチイベントのサポートを追加します。

AndroidManifest <uses-sdk>android:minSdkVersion="11"またはandroid:targetSdkVersion="11"のいずれかを定義すると、スプリットタッチイベントがデフォルトで有効になります。説明のためandroid:splitMotionEventsandroid:windowEnableSplitTouch

0

これはAndroid SDK 11+で自動的に機能するはずですが、私のアプリでは機能しませんでした。私はメインビューでのタッチと、メインビューのサブビューであるいくつかのビューをキャプチャしようとしていました。その場合、接触は、最初の接触を受けたビュー「レベル」によってのみ捕捉された。すべてのビューが兄弟であり、現在は期待どおりのイベントをキャプチャするようにビュー構造を再編成しました。

関連する問題