我的应用程序需要非常精确的运动测量。不是非常精确但接近它,我想如果用户将他们的手指放在屏幕上并向左或向右移动病房,假设最多100像素,我可以跟踪它。
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
// right to left swipe
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//increament in image index & showImage()
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//decrement in image index & showImage()
}
} catch (Exception e) {
// nothing
}
return false;
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event))
return true;
else
return false;
}
实际上我有动画帧和触摸事件我想快速移动这些图像,这样用户就能够以平滑的方式看到它的3D视图,只有当我有像素到像素的轨道时才有可能。
任何人都指导我如何实现这个目标?
答案 0 :(得分:0)
我不确定gestureListener是否可行。我能够使用OnTouchEvent跟踪您需要的级别:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
// capture start position from event
break;
case MotionEvent.ACTION_MOVE:
// do something interactively
break;
case MotionEvent.ACTION_UP:
// check distance between start and end postions and do something
break;
}
return true; // return true if you handle event otherwise return false!
}
还有许多其他行动事件可以帮助您。
答案 1 :(得分:0)
您是否定义了SWIPE_MIN_DISTANCE
,SWIPE_MAX_OFF_PATH
或SWIPE_THRESHOLD_VELOCITY
?
您可以这样声明它们:
private static final int SWIPE_MIN_DISTANCE = 200;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
您可以根据自己的喜好更改数值。