Touchイベントの伝達順序.

1864 ワード

まずすべてのビューとActivityが
dispatchTouchEvent// Touch
onTouchEvent// Touch

ビューグループにはもう一つ
onInterceptTouchEvent// Touch

インタフェースを押すと、まずActivityのdispatchTouchEventによって呼び出されます.次にルートViewsのdispatchTouchEventがサブViewに渡され、最後のサブViewがonTouchEventに最初に応答し、次に親ViewsのonTouchEventが呼び出されます.
ただし、現在のViewがView Groupの場合、dispatchTouchEventが呼び出されるとonInterceptTouchEventが呼び出されます.
以上の場合、デフォルトのsuperは返されません.xxxTouchEventの場合.
Activity:ActivityのdispatchTouchEventがsuperを呼び出していない場合.dispatchTouchEventでは、Touchイベントはここで終了し、後でTouchに関連するメソッドが呼び出されません.
だからActivityのdispatchTouchEventを書き換えると必ずsuperを呼び出す.Touchイベントを下に伝えるつもりがない限り、dispatchTouchEvent.ActivityのdispatchTouchEventメソッドの戻り値は、Touchイベントの後続呼び出しに影響しません.すべてがtrueを返し、falseはどうでもいいようです.
ViewGroup:ViewGroupのdispatchTouchEventがsuperを呼び出していない場合.dispatchTouchEventがtrueを返すと、Touchイベントはここで終了し、後にTouchに関連するメソッドは呼び出されません.falseを返すと、親ViewのonTouchEventが呼び出されます.superを呼び出すとdispatchTouchEvent、戻り値trueの場合、親ViewのonTouchEventは呼び出されません.View同理.
onInterceptTouchEvent戻り値がtrueの場合はTouchイベントがブロックされていることを示し、サブViewのdispatchTouchEventは呼び出されません.このメソッドはデフォルトでfalseを返し、サブViewを表すdispatchTouchEventが呼び出されます.
onTouchEventこのメソッドはTouchイベントがトリガーされたことを示します.trueを返すと、イベントは現在のViewで処理されており、親Viewは管理されていません.
onTouchEventを書き換えたがsuperを呼び出さなかった場合.onTouchEventは、現在のViewのOnClickListenerなどのイベントのトリガに影響します.
まとめ
  • dispatchTouchEvent/onTouchEventのいずれかがtrueを返すと、イベントはここで終了する.親ViewのonTouchEventは呼び出されません.
  • super.dispatchTouchEventは、サブViewのdispatchTouchEventと自分のonTouchEvent
  • を呼び出すために使用される
  • super.onTouchEventは、自分のOnClickListenerなどのイベントを呼び出すために使用されます.
  • onInterceptTouchEventの戻り値は、サブViewに渡されるイベントをブロックするかどうかを示すために使用される.trueは、サブViewのdispatchTouchEventが呼び出されないことを示す.
  • 現在のViewまたはView GroupにOnClickListenerなどの方法がある場合、TouchはdispatchTouchEvent/onTouchEventの戻り値に関係なくここで終了します.