gpt4 book ai didi

Android SimpleOnGestureListener.onFling 得到一个空的 MotionEvent

转载 作者:IT老高 更新时间:2023-10-28 23:21:51 25 4
gpt4 key购买 nike

我试图在一个简单的 Android 应用程序上检测一个 throw 事件,但第一个 MotionEvent 参数始终为空。为什么使用 null 参数调用 onFling 方法? Android documentation表示当一个 fling 事件发生时调用它,初始 on down MotionEvent 和匹配 up MotionEvent。

class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
// e1 always == null, return early a null reference exception
if (e1 == null) {
return false;
}
if (e1.getY() - e2.getY() > 120) {
handleFlingEvent();
return true;
}
return false;
}
}

主Activity有这个onTouchEvent方法:

GestureDetector flingDetector = new GestureDetector(new MyGestureDetector());

@Override
public boolean onTouchEvent(MotionEvent event) {
if (flingDetector.onTouchEvent(event)) {
return true;
}
return super.onTouchEvent(event);
}

最佳答案

我首先在 Android 4.0 中遇到了这个问题,因为我的代码在所有以前的版本中都可以正常工作。从这里的建议中得到提示后,我发现一个简单的解决方法是跟踪 onDown 事件并使用它来代替 onFling 的第一个参数,以防它碰巧为空。

public class MySimpleGestureListener extends SimpleOnGestureListener {
protected MotionEvent mLastOnDownEvent = null;

@Override
public boolean onDown(MotionEvent e) {
mLastOnDownEvent = e;
return true;//super.onDown(e);
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (e1==null)
e1 = mLastOnDownEvent;
if (e1==null || e2==null)
return false;
float dX = e2.getX()-e1.getX();
float dY = e2.getY()-e1.getY();
...rest of code
}

...rest of class
}

关于Android SimpleOnGestureListener.onFling 得到一个空的 MotionEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4151385/

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