我正在开发应用程序中的一项功能,可以进行放大和缩小。我注意到,当我放大时,即使我的两个手指仍在屏幕上,我的应用程序也会收到 onScaleEnd() 。因此,我的应用程序的行为方式出乎意料。我已经在 Nexus 5 Android 模拟器和 Google Pixel 平板电脑上对其进行了测试。请注意,在进行缩小时,当我从屏幕上移开任何一根手指时,都会按预期收到 onScaleEnd() 事件。
任何人都可以建议为什么会发生这种情况,或者这是一个已知的 Android 错误以及如何解决/修复它?
根据 Android 开发者的说法
onScaleEnd 响应缩放手势的结束。报告现有指针上升。缩放结束后,getFocusX() 并响应缩放手势的结束。报告现有指针上升。一旦缩放结束, getFocusX() 和 getFocusY() 将返回屏幕上剩余的指针的焦点。将返回屏幕上剩余指针的焦点。
如果手指之间的距离小于预定义的最小值,onTouch 处理程序将停止并调用 onScaleEnd。
mMinSpan 字段是在手势被声明为缩放(捏合缩放)之前手指必须移动的最小距离。这是有道理的,但如果手指错误地靠得太近,则该手势不应中止。
只要双指仍在屏幕上,就很明显用户仍在缩放。在我看来,这是 ScaleGestureDetector 中的一个错误。 7年后它仍然在那里......