- 处理触摸事件的一般步骤:
- 重写触摸事件处理方法:在自定义视图类中重写
onTouchEvent
方法,该方法用于处理各种触摸事件。
- 判断事件类型:通过
MotionEvent
的action
属性来判断触摸事件的类型,如MotionEvent.ACTION_DOWN
(按下)、MotionEvent.ACTION_UP
(抬起)、MotionEvent.ACTION_MOVE
(滑动)等。
- 实现响应逻辑:根据不同的事件类型,实现相应的业务逻辑,如点击事件、长按事件等。
- 关键代码实现(点击和长按事件):
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import android.view.View
import android.widget.Toast
import androidx.core.view.GestureDetectorCompat
class CustomView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
private lateinit var gestureDetector: GestureDetectorCompat
init {
gestureDetector = GestureDetectorCompat(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent?): Boolean {
// 处理点击事件
Toast.makeText(context, "点击事件", Toast.LENGTH_SHORT).show()
return true
}
override fun onLongPress(e: MotionEvent?) {
// 处理长按事件
Toast.makeText(context, "长按事件", Toast.LENGTH_SHORT).show()
}
})
}
override fun onTouchEvent(event: MotionEvent?): Boolean {
return gestureDetector.onTouchEvent(event) || super.onTouchEvent(event)
}
}