これは古い質問であることは承知していますが、これを行う正しい方法はgetScaledTouchSlop()
、ユーザーがスクロールしていると考える前に、タッチが移動できるピクセル単位の距離を返すを使用することです。
onTouch メソッドで次のように実装します。
@Override
public boolean onTouch(final View v, MotionEvent event) {
int mSwipeSlop = ViewConfiguration.get(context).
getScaledTouchSlop();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// DO
break;
case MotionEvent.ACTION_CANCEL:
// DO
break;
case MotionEvent.ACTION_MOVE:
{
float x = event.getX() + v.getTranslationX();
float deltaX = x - mDownX;
float deltaXAbs = Math.abs(deltaX);
float y = event.getY() + v.getTranslationY();
float deltaY = Y - mDownY;
float deltaYAbs = Math.abs(deltaY);
float absDist = Math.sqrt(Math.pow(deltaXAbs, 2) + Math.pow(deltaXAbs, 2));
if (!mSwiping) {
if (absDist > mSwipeSlop) {
mSwiping = true;
}
}
break;
case MotionEvent.ACTION_UP:
{
if (mSwiping) {
// DO MOVE ACTIONS
}
else {
// DO TAP ACTIONS
}
}
break;
default:
return false;
}
return true;
};
開発者ページ: http://developer.android.com/reference/android/view/ViewConfiguration.html#getScaledTouchSlop()