ViewGroupによるタッチイベントの管理

ViewGroupにおけるタッチイベントの管理

onInterceptTouchEvent()メソッドをオーバーライドすることで、サブビューに対して、タッチイベントを発生させないようにすることができる。

class MyViewGroup @JvmOverloads constructor(
        context: Context,
        private val mTouchSlop: Int = ViewConfiguration.get(context).scaledTouchSlop
) : ViewGroup(context) {

    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
        if (mIsScrolling) {
            // サブビューに対してタッチイベントが発生させないようにし、自身のタッチイベントが発生するようにする。
            return true
        } else { 
            // サブビュー側のタッチイベントが呼び出される
            return false
        }
    }

サブビューは、ViewGroupのrequestDisallowInterceptTouchEvent(boolean)メソッドを通じて、横取りしないように要求することもできる。

参照

https://developer.android.com/training/gestures/viewgroup