Android开发 View的Touch触控事件

发布时间 2023-03-29 13:59:18作者: 观心静

前言

  此篇博客讲解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