我根据这个主题实现了我的手势监听器:ListView Horizontal Fling Gesture
但是,我可以看到列表滚动较慢,有时(当您滚动非常慢时)它也会阻塞。我认为问题出在听众身上:计算值需要时间,因此得到我正在寻找的实际“从左到右”的投掷......没有更有效的方法吗?
编辑
问题在这里:
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
return false;
}
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
System.out.println("right to left");
animatedStartActivity(0);
// right to left swipe
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
System.out.println("left to right");
animatedStartActivity(1);
}
return false;
}
评估这种方法需要时间
编辑2: 我猜问题是因为listview已经有自己的手势监听器并且附加我的覆盖它。这是一个问题,因为 listview 手势侦听器也考虑了速度和加速度,以提供良好的移动效果。我的听众很原始,所以列表滚动不再流畅了..即使我的 onFLing 方法总是返回 false (所以它不消耗事件)列表滚动受到影响......
edit3:好吧,也许我找到了解决方案,但我需要你的帮助!我可以在容器布局上设置onTouchListener,问题是listview实际上覆盖了父级的onTouch,所以我需要扭转这种情况:listview上的onTouchEvent必须被父级拦截,所以返回false是对listview的影响