拦截ACTION_DOWN和ACTION_UP但仍然发送给子视图

时间:2017-12-18 12:21:47

标签: android ontouchlistener viewgroup

我正在延长LinearLayout并覆盖onInterceptTouchEventonTouchEvent,因为我希望收到所有子视图的所有触摸事件。我只对收到ACTION_DOWNACTION_UP MotionEvent感兴趣。我仍然希望孩子们观看所有活动。

我发现的问题是,如果

  • onInterceptTouchEvent返回false:所有后续的MotionEvent都会发送到子视图,我将不会收到ACTION_UP
  • onInterceptTouchEvent返回true:所有后续的MotionEvent都会发送到我的onTouchEvent视图,子视图将不会收到任何内容。

    class LinearLayout : android.widget.LinearLayout {
    
        constructor(context: Context) : super(context)
        constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
        constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int) : super(context, attributeSet, defStyleAttr)
        constructor(context: Context, attributeSet: AttributeSet, defStyleAttr: Int, defStyleRes: Int) : super(context, attributeSet, defStyleAttr, defStyleRes)
    
        override fun onInterceptTouchEvent(event: MotionEvent): Boolean  {
            Log.d("LinearLayout", "onInterceptTouchEvent >> $event")
            return when (event.action) {
                MotionEvent.ACTION_DOWN -> true // or false
                MotionEvent.ACTION_UP -> true
                else -> false
            }
        }
    
        override fun onTouchEvent(event: MotionEvent): Boolean {
            Log.d("LinearLayout", "onTouchEvent >> $event")
            return true
        }
    }
    

有没有办法拦截所有MotionEvent并将它们全部发送到儿童观点?如果没有,是否有其他方法可以拦截ViewGroup上的所有触摸事件?

0 个答案:

没有答案