当用户仍然在屏幕上滑动时,我试图检测滑动方向的变化。
我有类似的东西(非常基本的)用于检测滑动方向:
@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高于最后Y
答案 0 :(得分:0)
如果您想要检测滑动的方向更改,可以采用一种简单的方法:
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
findViewById(R.id.myView).setOnTouchListener(this);
gestureDetector = new GestureDetector(this, this);
}
你实现像这样的OnTouch和GestureListeners:
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (distanceY > 0){
// you are going up
} else {
// you are going down
}
return true;
}
@Override
public boolean onDown(MotionEvent e) {
return true;
}
//the rest of the methods you must implement...