我在使用我的应用程序检测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上 - 绝对没有反应。 我真的不知道该怎么办,所以感谢您提前提供任何帮助。
答案 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,效果很好。只需要在手势库中添加两个滑动手势。