ScaleGestureDetector无法检测手势结束
作者:互联网
我已经按照Android文档中的说明将ScaleGestureDetector钩接到OnTouchListener上.由于某种原因,ScaleGestureDetector并不总是检测到捏手势的结束.这种情况通常发生在从大到小快速捏紧时.
效果是当我松开两只手指后,检测器不会触发手势结束事件.如果之后再用一个触摸屏幕,它仍然认为我正在继续缩放手势(保持触发onScale事件).我必须做另一个手势才能使探测器触发结束事件.
我已将日志添加到OnTouchListener,并且当缩放手势被卡住时,使用一根手指并且event.getPointerCount()为1时,我仍然通常会收到运动事件.
我确保没有其他听众介入.具有onTouchListener的视图不是屏幕上唯一的视图,但是当我非常小心地在该视图内开始和结束手势时,也会发生这种效果.
有什么方法可以改善末端检测?
还是我可以手动设置ScaleGestureDetector来触发onScaleEnd并将scaleGestureDetector.isInProgress()更改为false?
解决方法:
应用以上修复程序后,我想出了一个解决方案.我的应用程序同时使用了ScaleGestureDetector和普通的GestureDetector,因此我在onScroll方法中实现了(来自GestureDetector):
if (m_dualFingerGestureDetector.isInProgress() && (evt1.getPointerCount() == 2 || evt2.getPointerCount == 2)
{
return false;
}
...
我的变量如下:
m_dualFingerGestureDetector是我的ScaleGestureDetector
evt1和evt2是拖动手势的MotionEvent.如果只有一个事件,则可以缩短上面的代码:
if (m_dualFingerGestureDetector.isInProgress() && evt.getPointerCount() == 2)
{
return false;
}
...
这允许构建非常好的用户界面.我总是建议您使用手势检测器的组合为您的应用程序添加平移和缩放功能.
标签:multi-touch,gesture-recognition,android 来源: https://codeday.me/bug/20191023/1915297.html