Android - GridView - GestureDetector不起作用

时间:2012-02-28 18:52:10

标签: android gridview gestures gesturedetector

我在使用我的应用程序检测fling手势时遇到问题。 我的布局包括一个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上 - 绝对没有反应。 我真的不知道该怎么办,所以感谢您提前提供任何帮助。

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

Afaik gridview自动添加ScrollView功能,并拦截手势检测。您将必须实现自己的GridView来覆盖该行为并添加fling检测。在stackoverflow和其他站点上有许多ScrollView示例。为GridView做类似的方法。

答案 2 :(得分:1)

我实际上找到了另一个解决方案,因为我尝试这样做的方式根本没有用,没人知道原因。我使用的是GestureOverlayView,效果很好。只需要在手势库中添加两个滑动手势。

相关问题