如果这些手势是在某些特定的ListView行中制作的,我需要停止ListView以对用户手势做出响应 - 如何做?目标ListView的行视图设置了onTouchListener,由于ListView向上/向下滚动,我无法识别滑动/翻转。所以如果我将手指向上或向下移动 - ListView会截取并在相应的方向上滚动。所以我需要以某种方式来对它进行规则化,就像Y坐标超过一定数量一样 - 让ListView滚动,如果不是 - 识别手势为一次/滑动。 OnTouchListener是如何防止ListView滚动时触摸/滑动/扔它的行?
private int SWIPE_MIN_DISTANCE = 1;
private int SWIPE_MAX_OFF_PATH = 300;
final OnTouchListener flingSwipeListener = new OnTouchListener() {
float touchX;
float touchY;
@Override
public boolean onTouch(final View view, final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
touchX = event.getX();
touchY = event.getY();
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
if (Math.abs(touchY - event.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
else if (touchX - event.getX() > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","right to left swipe");
}
// left to right swipe
else if (event.getX() - touchX > SWIPE_MIN_DISTANCE){
Log.i("flingSwipe","left to right swipe");
}
}
return true;
}
};
此onTouchListner被设置为一个特定的行。我需要冻结ListView,而onTouchListener识别手势,但如果失败,我需要将MotionEvent发送到ListView。
不,我需要禁用ListView的内置触摸检测器/识别器,如果我滑动它的特定行。因为我需要冻结ListView而滑动它的行。 – Stan
好的,只要用户触摸到你想要的行,你必须做的事情就是。禁用列表滚动。不是吗?当用户触摸其他行时,启用默认滚动。 – shujatAli
是的,就像我在我的问题中的代码下面添加的一样。我需要冻结ListView,而用户在特定的ListView行中进行手势操作。所有其他ListView的行必须照常运行。此外,当我检测到我的OnTouchListener中的Y轴过大时,我需要将手势传递给ListView,以使用户能够滚动ListView,即使通过我的特殊行。 – Stan