我目前正在开发一个 Android 应用程序,该应用程序允许用户在屏幕上左右移动手指时演奏小提琴。当他们停止移动手指并且小提琴的弓停止移动时,我希望音乐停止播放。
我正在使用典型的 onTouchEvent 来捕获移动手势,现在我想知道检测用户的最佳方法是用户仍在触摸屏幕,但没有移动他们的手指。
这是我目前的代码,带有一个非常意大利面的功能来检测运动量,这会遇到以下两个问题:
1:当用户从左向右移动时,它会在瞬间将其注册为没有移动并停止声音。
2:你的手指不可能完全静止,我需要允许少量的动作。
任何人都可以提出比以下检测缺乏运动的正确方法吗?
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
audio.start();
bowImage.setY(430);
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
float posX = event.getX();
if ( detectValidMovement(posX) ) {
bowImage.setX(posX);
audio.start();
} else {
audio.pause();
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
audio.pause();
}
return true;
}
private boolean detectValidMovement(float posX) {
int newX = Math.round(posX);
if (oldX > 0) {
int distanceMoved = newX - oldX;
if (oldX != newX) {
oldX = newX;
return true;
} else {
oldX = newX;
return false;
}
} else {
oldX = newX;
}
return false;
}