私は現在、ユーザーが画面上で指を左右に動かしながらバイオリンを演奏できるようにする Android アプリケーションに取り組んでいます。指の動きが止まり、バイオリンの弓が動かなくなったら、音楽の再生を止めたいと思います。
私は典型的な onTouchEvent を使用して動きのジェスチャーをキャプチャしていますが、ユーザーを検出する最良の方法は、ユーザーがまだ画面に触れているが、指を動かしていないことです。
これは、次の2つの問題に遭遇する動きの量を検出するための非常にスパゲッティ関数を備えた現時点での私のコードです:
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;
}