3

我在我的应用程序中检测到投掷手势时遇到问题。我的布局由一个 GridView、几个 TextView 和按钮组成。

我实现了 OnGestureListener:

public class MyActivity extends Activity implements OnGestureListener{
private GestureDetector myGesture ;

然后在 OnCreate 中:

myGesture = new GestureDetector(this);

和覆盖的方法:

@Override
public boolean onTouchEvent(MotionEvent event){
    return myGesture.onTouchEvent(event);
}

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //right to left fling
        }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //left to right fling
        }
    } catch (Exception e) {
        // nothing
    }
    return false;
}

这实际上效果很好,但不适用于 GridView。无论我在 GridView 之外的哪个地方执行投掷,它都可以工作。在 GridView 上 - 绝对没有反应。我真的不知道该怎么做,所以提前感谢您的帮助。

4

3 回答 3

2

当事件被消耗时,您是否在 onFling 中返回 true(如下所示)?

    @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //right to left fling
        }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //left to right fling
        }
        return true;
    } catch (Exception e) {
        // nothing
    }
    return false;
}
于 2012-02-28T19:06:22.510 回答
1

我实际上找到了另一种解决方案,因为我尝试这样做的方式根本不起作用,没有人知道为什么。我改用 GestureOverlayView,效果很好。只需在手势库中添加两个滑动手势即可。

于 2012-03-04T22:18:47.807 回答
1

Afaik gridview 还自动添加了 ScrollView 功能,它们拦截了手势检测。您将必须实现自己的 GridView 来覆盖该行为并添加到 fling 检测中。stackoverflow 和其他网站上有许多 ScrollView 示例。只需对 GridView 执行类似的方法。

于 2012-02-28T19:06:15.613 回答