Androidのイベントが外側から内側にトリガされ、復帰はおそらくイベント配信メカニズムで今日導入、内側からある
プロセスを探して、まず、Androidのイベント配信は、プロセスのアクティビティ- > DecorView->ビュー基- >ビューであります、主に関連する方法があります
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
イベントの分布は、この配布方法は、主の役割を果たしています
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
偽イベントはの代表ではない戻り、この方法は、サブ表示に渡すを許可されていないイベントの真の代表に復帰しなければならない消費イベントに対して、onTouchEvent()の現在のビューをトリガするのViewGroupに主に、イベント配信をインターセプトすることですインターセプトは、イベントは子ビューに渡すことができ、デフォルトはfalseを返します
@Override
public boolean onTouchEvent(MotionEvent ev) {
return super.onTouchEvent(ev);
}
このメソッドは、パラメータのジェスチャーセットとして、これはモニターのユーザーのジェスチャー、onTouchの後、コールバックメソッドtouchlistenerで、タッチイベントです。私たちは自分の指でボタンをクリックして、すぐに離し、その後、onTouchイベントのみACTION_DOWNとACTION_UPアクションを実行する場合は、ボタンの携帯電話のクリックを使用している場合、また、一瞬のためにボタンの上で指をスライドさせ、その後に、プロセスにACTION_MOVEアクションをスライドさせこれは、実行を停止しません
だから、onClickのそれを実行せずにのみonTouchを実行する方法、それをどのようにのonClickイベントをトリガしていますか?
ビューのソースポイントから、それはonTouchはonClickの前に行われ、onClickのの実装に影響を与えることができること、onClickイベントを実行するかどうかを決定するために、ユーザーのジェスチャーや戻り値に応じて、onTouchの最初の実装です。
あなたがonTouchイベントを実行したいと配布をダウン実行されない場合、その後、真単にonTouchメソッドの戻り値は、それが実行されるだけonTouchイベントはonClickイベントを実行されません
呼び出しシーケンスのためのイベント配信メカニズムをまとめたもの:
のViewGroupイベント配送方法:
dispatchTouchEvent
onInterceptTouchEvent
onTouchEvent
:ビューイベント配送方法
dispatchTouchEvent
onTouchEvent
のみのViewGroupコンテナはonInterceptTouchEventメソッドを持っています。最後の子として傍受する必要を表示しないので、切片は意味を持たないかどうか、イベントを伝承し続けることができませんでした。
ます。https://www.jianshu.com/p/8bd6b82beec8で再現