タッチイベントの伝播を止める方法
スクロールできるビューの上にさらにスクロールできるものを追加する場合などに、一番上のビューだけがタッチイベントを処理するようにする方法
Created at

299 Words
⚠️

仮定する状況

たとえば、ドロワーの上に横方向のRecyclerViewを配置した場合、RecyclerViewの項目をスクロールしようとするとドロワーが閉じてしまう。
また他にも、ViewPagerでタブフラグメントを表示して、その上に同じように横方向にスクロールできるビューを配置したい場合などでも同様。

対応策

そのような場合に、操作対象のビューのタッチイベントだけを処理してドロワーやらタブやらの切り替えを防ぐには、次のようにしてタッチイベントの伝播を防ぐことができる。

targetView.setOnTouchListener { view, ev ->
    // 伝播を防ぐ
    parent.requestDisallowInterceptTouchEvent(true)

    // ビューに対する処理
    // ~~~
    false
}

RecyclerViewとかなら、項目のタッチイベントで同じようにすればよい。

See Also