前言
此篇博客讲解View的触控事件
Touch的两种实现与关系
第一种
直接在View上实现setOnTouchListener
mBinding.multiTouchView.setOnTouchListener(object : View.OnTouchListener {
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
Log.e("zh", "setOnTouchListener:")
return false
}
})
第二种
在继承View的自定义View里,重写onTouchEvent方法
class MultiTouchView(context: Context?, attrs: AttributeSet?) : View(context, attrs) { override fun onTouchEvent(event: MotionEvent?): Boolean { return super.onTouchEvent(event) } }
这两种实现的方式的使用上没有什么区别,都可以用一样的方式去处理触摸事件。但是,他们的先后关系我们需要搞清楚。
直接在View上实现setOnTouchListener的是大于重写onTouchEvent方法。 当setOnTouchListener返回是false的时候,这2个方法都会触发。但是,如果setOnTouchListener方法返回true(返回true就是要消费这次触控事件),就会只触发setOnTouchListener不触发重写的onTouchEvent。我们可以在View的源码中看到部分逻辑判断。
MotionEvent详解
End