androidのクリックイベントが伝播する仕組みは?

AndroidではViewツリーのトラバースとディスパッチによってクリックイベントの伝達メカニズムを実現している。

ユーザーが画面をタッチすると、システムはタッチイベントを最上位のビューから順番に下に伝えます。まず、最上位のViewGroupにイベントが渡され、サブビューをたどることで段階的に下に伝わっていきます。

ビューにイベントが渡されるとき、各ビューはイベント処理を行う機会が得られます。ビュー自身がイベントを処理できる場合は、適切なコールバックメソッド(onTouchEvent()など)を呼び出してイベントを処理し、イベントの伝送はそこで停止します。ビューがそのイベントを処理できない場合は、ビューはそのイベントを親ビューに渡して処理させます。

父Viewもイベント処理を行うチャンスがあり、自らの論理によりイベントのインターセプト(処理の中断)を行うかどうか決定します。父Viewがイベントをインターセプトした場合、onInterceptTouchEvent()メソッドを呼び出してイベントをインターセプトし、イベントの伝達は停止します。父Viewがイベントをインターセプトしなかった場合、イベントは階層下の次のViewに伝わります。

イベントが最下層の子Viewに渡されても子Viewで処理できず、イベントは親Viewに渡され続け、イベントが処理されるか、最上層のViewGroupに渡るまで続きます。

クリックイベントはメインスレッドで伝達されるため、処理に時間がかかると画面がフリーズする可能性があることに注意してください。したがって、クリックイベントを処理するときは時間のかかる操作を避けるか、サブスレッドでの処理を検討してください。

bannerAds