ImageViewでジョイスティックを作りたいです。ユーザーはビューに触れて「スティック」を動かします。
ivjoystick.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
touch(event);
return true;
}
});
touch メソッドは、ユーザーがビューに触れたときに呼び出され、イベントが検出され、ジョイスティックが必要に応じて機能します。指が「開始点」から離れるとすぐに、onTouch メソッドは (指の動きで) 呼び出されなくなります。ジョイシックがフリーズします。
この動作は、 touch メソッドの動作とは無関係です。ただし、そのコードは次のとおりです。
private void touch(MotionEvent event) {
if (!(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE || event.getAction() == MotionEvent.ACTION_UP))
return;
double oldx = x;
double oldy = y;
x = (event.getX() - centerx) / rpad;
y = (event.getY() - centery) / rpad;
if (Math.sqrt(x * x + y * y) > 1) {
x /= Math.sqrt(x * x + y * y);
y /= Math.sqrt(x * x + y * y);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
x = 0;
y = 0;
}
if (SystemClock.uptimeMillis() - last < minintervall && event.getAction() == MotionEvent.ACTION_MOVE)
return;
if (oldx != x || oldy != y) {
draw();
send();
}
return;
}