我已按照Android文档中的说明将ScaleGestureDetector连接到OnTouchListener。由于某种原因,ScaleGestureDetector并不总是检测到捏合手势的结束。这种情况主要发生在从大到小快速挤压时。
效果是,在我释放两根手指后,探测器不会触发手势结束事件。如果我之后用一个触摸屏幕,它仍然认为我正在继续缩放手势(继续触发尺度事件)。我必须做另一个手势让探测器发射终止事件。
我已将日志添加到OnTouchListener中,当缩放手势卡住时,我仍然可以正常使用一根手指并且event.getPointerCount()为1时获得动作事件。
我已经确定我没有其他听众干预。具有onTouchListener的视图不是屏幕上的唯一视图,但是当我非常小心地开始并在这一个视图中结束手势时,也会发生这种效果。
有没有办法改善结束检测?
或者,如果我有办法手动将ScaleGestureDetector设置为触发onScaleEnd并将scaleGestureDetector.isInProgress()
更改为false?
答案 0 :(得分:4)
在应用上述修复程序后,我想出了一个解决方案。我的应用程序同时使用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;
}
...
这样可以构建非常漂亮的用户界面。我总是建议使用手势检测器的组合为您的应用添加平移和缩放功能。
答案 1 :(得分:1)
您可能遇到以下错误 http://code.google.com/p/android/issues/detail?id=10067
我必须将ScaleGestureDetector实现复制到我的本地项目中,以便我可以应用该修复程序。我也针对2.1设备,所以除非我将它复制到我的项目中,否则我无法使用此类。