onScaleEnd 提前收到

问题描述 投票:0回答:2

我正在开发应用程序中的一项功能,可以进行放大和缩小。我注意到,当我放大时,即使我的两个手指仍在屏幕上,我的应用程序也会收到 onScaleEnd() 。因此,我的应用程序的行为方式出乎意料。我已经在 Nexus 5 Android 模拟器和 Google Pixel 平板电脑上对其进行了测试。请注意,在进行缩小时,当我从屏幕上移开任何一根手指时,都会按预期收到 onScaleEnd() 事件。

任何人都可以建议为什么会发生这种情况,或者这是一个已知的 Android 错误以及如何解决/修复它?

android scaling zooming pinchzoom
2个回答
0
投票

根据 Android 开发者的说法

onScaleEnd 响应缩放手势的结束。报告现有指针上升。缩放结束后,getFocusX() 并响应缩放手势的结束。报告现有指针上升。一旦缩放结束, getFocusX() 和 getFocusY() 将返回屏幕上剩余的指针的焦点。将返回屏幕上剩余指针的焦点。


0
投票

如果手指之间的距离小于预定义的最小值,onTouch 处理程序将停止并调用 onScaleEnd。

请参阅此处的代码:https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/view/ScaleGestureDetector.java;drc=68c65e58b4f4daf79c9ffab518a826a506799db2;l =347

mMinSpan 字段是在手势被声明为缩放(捏合缩放)之前手指必须移动的最小距离。这是有道理的,但如果手指错误地靠得太近,则该手势不应中止。

只要双指仍在屏幕上,就很明显用户仍在缩放。在我看来,这是 ScaleGestureDetector 中的一个错误。 7年后它仍然在那里......

© www.soinside.com 2019 - 2024. All rights reserved.