我正在延长LinearLayout
并覆盖onInterceptTouchEvent
和onTouchEvent
,因为我希望收到所有子视图的所有触摸事件。我只对收到ACTION_DOWN
和ACTION_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
上的所有触摸事件?