ユーザーのジェスチャーが特定の ListView の行で行われた場合、ユーザーのジェスチャーに応答するために ListView を停止する必要があります。対象の ListView の行ビューには onTouchListener が設定されており、ListView の上下スクロールのためにスワイプ/フリップを認識できません。したがって、指を少し上下に動かすと、ListView がそれをインターセプトし、対応する方向にスクロールします。したがって、Y座標が一定量以上変化した場合のように、どういうわけかそれをルール化する必要があります-ListViewをスクロールさせ、そうでない場合-ジェスチャをフリング/スワイプとして認識させます。OnTouchListener は
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 は、1 つの特定の行に設定されました。onTouchListener がジェスチャを認識している間は ListView をフリーズする必要がありますが、失敗した場合は MotionEvent を ListView に送信する必要があります。