如何防止ViewGroup接收ACTION_CANCEL事件?问题分析与解决
自定义ViewGroup中ACTION_CANCEL异常触发问题
我现在完全陷入困境,翻遍了所有关于ACTION_CANCEL的相关问题及官方文档,均无法解决我的问题。
以下是我的场景示例:将自定义ViewGroup(内部类)设置为Activity的内容视图:
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(GestureView(applicationContext)) } private class GestureView(context: Context) : ViewGroup(context) { init { setBackgroundColor(Color.BLUE) } override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { } override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean { Log.d("GestureView", "(onInterceptTouchEvent) " + MotionEvent.actionToString(ev!!.actionMasked) ) return true } @SuppressLint("ClickableViewAccessibility") override fun onTouchEvent(event: MotionEvent?): Boolean { Log.d("GestureView", "(onTouchEvent) " + MotionEvent.actionToString(event!!.actionMasked) ) return true } } }
我需要实现单指按住屏幕、另一手指移动的特定手势,但操作时经常收到如下事件序列:
(onInterceptTouchEvent) ACTION_DOWN (onTouchEvent) ACTION_DOWN (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_POINTER_DOWN(0) (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_CANCEL (onInterceptTouchEvent) ACTION_DOWN (onTouchEvent) ACTION_DOWN (onTouchEvent) ACTION_POINTER_DOWN(0) (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_POINTER_UP(0) (onTouchEvent) ACTION_MOVE (onTouchEvent) ACTION_CANCEL
触发ACTION_CANCEL后,该手势不再接收后续事件,必须抬起所有手指才能重新开始。
请问该取消事件为何发生?如何阻止它以继续手势操作?
我已尝试以下方案,但均无效果:
- 在
onInterceptTouchEvent()中返回true或false; - 使用
dispatchTouchEvent()替代onInterceptTouchEvent(); - 添加
requestDisallowInterceptTouchEvent(true)(因无父视图拦截,此方法无效)。
内容的提问来源于stack exchange,提问作者Mahm00d
相关产品推荐
相关产品推荐

