複数の子を持つViewGroupがあるとします。このViewGroupについては、すべての子のすべてのMotionEventを管理する必要があります。つまり、VGは
1.ターゲット(子)にディスパッチされる前にすべてのイベントをインターセプトできるようになります。2。VG
は最初にイベントを消費します。さらに、イベントをターゲットの子
3にディスパッチするかどうかを決定します。DOWN、MOVE、UP、比較的独立しているように見せたいので、VGはDOWNを食べることができますが、子供にはMOVEとUPを与えます。
SDKガイド「HandlingUIEvent」を読み、イベントリスナー、ハンドラー、ViewGroup.onInterceptTouchEvent(MotionEvent)、およびView.onTouchEvent(MotionEvent)を知っていました。
これが私のサンプルです、
@Override
public boolean onInterceptTouchEvent (MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
return super.onInterceptTouchEvent(event);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (MotionEvent.ACTION_DOWN == event.getAction()) {
return true;
}
else {
if (!consumeEvent(event)) {
// TODO: dispatch to target since I didn't want to eat event
//return this.dispatchTouchEvent(event); // infinite loop!!!
}
}
return super.onTouchEvent(event);
}
SDKがそう言ったので、いくつかのイベントを食べることができるようにするには、DOWNイベントが発生したときに上記の両方のメソッドでtrueを返す必要があります。次に、onTouchEventでMOVEとupを確認できました。しかし、私の場合、子供たちにイベントを送る方法がわかりません。
上記のdispatchTouchEventは、VG自体がターゲットである可能性があるため、理解できる無限ループにつながりました。その時点でどちらがターゲットになるかはわかりません。MotionEventはヒントを提供しなかったため、dispatchTouchEventはまったく役に立ちませんでした。
誰かが私を助けてくれますか?ありがとう。