gpt4 book ai didi

android - 为什么 Android MotionEvent.getHistoricalX 抛出异常

转载 作者:太空狗 更新时间:2023-10-29 15:47:02 25 4
gpt4 key购买 nike

我正在使用 GestureDetector.OnGestureListener 以在 Android 中实现双指缩放。我正在扩展 TextView 类,因此方法 setTextSize() 已经实现。以下是我的 onScroll() 代码。

 @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(LOGGING) Log.v(MODULE_NAME, "onScroll()");

float x, y;
float oldDist, newDist;

if (e2.getPointerCount() == 2 &&
((e2.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_MOVE)) {
x = e2.getHistoricalX(0, 0) - e2.getHistoricalX(1, 0);
y = e2.getHistoricalY(0, 0) - e2.getHistoricalY(1, 0);
oldDist = FloatMath.sqrt(x * x + y * y);
if (oldDist > 10) {
if (LOGGING) Log.d(MODULE_NAME, "Starting ZOOM mode");
x = e2.getX(0) - e2.getX(1);
y = e2.getY(0) - e2.getY(1);
newDist = FloatMath.sqrt(x * x + y * y);

if (newDist > 30) {
float scaleFactor = (newDist > oldDist) ? oldDist : newDist;
float scale = (newDist - oldDist) / scaleFactor;
// Callback to be processed in main thread
setTextSize(scale * currentTextSize);
oldDist = newDist;
}
scrollDetected = true;
return true;
}
}
return false;
}

我的问题是,偶尔不总是getHistoricalX() 会抛出异常。我附上了 LogCat 结果。

07-31 16:53:30.358: V/ZoomTextView(19540): onScroll()
07-31 16:53:30.358: E/InputEventReceiver(19540): Exception dispatching input event.
07-31 16:53:30.358: E/MessageQueue-JNI(19540): Exception in MessageQueue callback: handleReceiveCallback
07-31 16:53:30.358: E/MessageQueue-JNI(19540): java.lang.IllegalArgumentException: historyPos out of range
07-31 16:53:30.358: E/MessageQueue-JNI(19540): at android.view.MotionEvent.nativeGetAxisValue(Native Method)
07-31 16:53:30.358: E/MessageQueue-JNI(19540): at android.view.MotionEvent.getHistoricalX(MotionEvent.java:2739)

因为我知道有 2 个指针并且历史至少是 0 的大小,所以我不清楚这个异常是如何发生的或者为什么会发生。任何人都可以帮忙吗?

我看到了this similar question ,这对我没有帮助。

最佳答案

在使用 getHistoricalX()getHistoricalY() 之前,您应该使用 getHistorySize() 检查大小。

如果它返回零,您就知道没有历史事件。然后您只需使用 getX()getY() 处理当前事件。

关于android - 为什么 Android MotionEvent.getHistoricalX 抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17972724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com