我认为这很容易。一如既往
//somewhere inside constructor
overlay.addOnTouchListener(this)
//...
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
event?:return false
if (event.actionMasked == MotionEvent.ACTION_DOWN || event.actionMasked == MotionEvent.ACTION_POINTER_DOWN) {
//start drag
moving=true
} else if (event.actionMasked == MotionEvent.ACTION_MOVE) {
if (!moving) return true
//do drag
} else if (event.actionMasked == MotionEvent.ACTION_UP) {
//stop drag
println("touch:up(${event.pointerCount})")
}
return true
}
我原本希望MotionEvent.ACTION_UP在每个手指松开时都会触发,但看起来最后一根手指只触发一次。
当用户松开一根手指而又继续移动另一根手指时,是否存在捕捉瞬间?
答案 0 :(得分:0)
您可以使用两种方法getPointerCount(x) and/or getPointerId(x)。
getPointerCount获取事件中包含的数据的指针数。总是> = 1。
虽然getPointerId()返回事件中与特定指针数据索引关联的指针标识符。标识符告诉您与数据关联的实际指针编号,说明自当前手势开始以来上下移动的各个指针。
因此,在您的情况下,如果要捕获未从屏幕上删除的指针,则可以使用getPointerCount来检查是否已删除指针,然后在最后一个指针时使用getPointerId分配某种功能已发布。
答案 1 :(得分:0)
初始语句不正确。实际上,android会通过事件MotionEvent.ACTION_UP/MotionEvent.ACTION_POINTER_UP