我正在尝试检测何时更改了滑动方向,而用户仍在屏幕上滑动。
我有这样的东西(非常基本)来检测滑动方向:
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN: {
Log.d(TAG, "onTouch: DOWN _Y = " + motionEvent.getRawY());
mLastTouchY = mPrevTouchY = motionEvent.getRawY();
break;
}
case MotionEvent.ACTION_MOVE: {
Log.d(TAG, "onTouch: MOVE _Y = " + motionEvent.getRawY());
final float dy = motionEvent.getRawY();
if (dy >= mLastTouchY) {
/* Move down */
} else {
/* Move up */
}
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP: {
Log.d(TAG, "onTouch: UP _Y = " + motionEvent.getRawY());
// snap page
break;
}
}
return true;
}
我需要的是实际检测用户何时更改滑动方向。例如,上面的代码无法检测到一些边缘情况:
- 从 Y = 100 开始,
- 向下移动到 150,
- 向上移动到50,
- 再次向下移动直到 90
这将被检测为向上滑动,因为初始 Y 高于最后一个 Y