【发布时间】:2016-11-28 23:34:45
【问题描述】:
我正在尝试检测何时更改了滑动方向,而用户仍在屏幕上滑动。
我有这样的东西(非常基本)用于检测滑动方向:
@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
【问题讨论】:
-
如果你从 y = 100 开始,那么你将如何向上移动直到 y = 150?
-
对不起,我搞砸了方向,现在更新了。
-
你得到的其实是真的......如果您只想要滑动的最后一个方向(我从问题中理解),您必须以不同的方式实现它。
-
我知道这基本上是正确的,但是当用户改变方向时,我想对这种改变做出正确的反应。问题是我无法想出一个好的解决方案来检测 OnTouch MotionEvent 何时实际发生方向变化。如果您有任何想法,请发布它,也许它至少可以引导我朝着正确的方向前进。谢谢。
标签: android direction ontouch yaxis