私はAndroidプログラミングにまったく慣れていません。私がする必要があるのは、矢印の動きが止まった後の矢印の角度を計算することです。私は次のコードを使用しています:
public boolean onTouch(View v, MotionEvent event) {
//double xValue, yValue;
xValue = event.getX();
yValue = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// reset the touched quadrants
for (int i = 0; i < quadrantTouched.length; i++) {
quadrantTouched[i] = false;
}
allowRotating = false;
startAngle = getAngle(event.getX(), event.getY());
break;
case MotionEvent.ACTION_MOVE:
double currentAngle = getAngle(event.getX(), event.getY());
rotateDialer((float) (startAngle - currentAngle));
startAngle = currentAngle;
break;
case MotionEvent.ACTION_UP:
allowRotating = true;
break;
}
使用できる必要がありxValue
ますyValue
private double getAngle(double xTouch, double yTouch) {
double x = xTouch - (dialerWidth / 2d);
double y = dialerHeight - yTouch - (dialerHeight / 2d);
switch (getQuadrant(x, y)) {
case 1:
return Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
case 2:
case 3:
return 180 - (Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI);
case 4:
return 360 + Math.asin(y / Math.hypot(x, y)) * 180 / Math.PI;
default:
// ignore, does not happen
return 0;
}
}
挿入xValue
しyValue
てgetAngle()
public void run() {
//double angleValue;
setCheck(velocity);
if (Math.abs(velocity) > 5 && allowRotating) {
rotateDialer(velocity / 75);
velocity /= 1.0666F;
// post this instance again
dialer.post(this);
}else{
/*Thread myThread = new Thread(new UpdateThread());
myThread.start();*/
}
}
そして、メソッドgetAngle()
内の他の場所から呼び出します。run()
問題は、モーションイベント中xValue
にyValue
のみが計算されることです。モーションイベントが終了した後も、画像は回転し続けます。そのため、画像の速度が0に達したときから最新の値を取得する必要がありますMotionEvent
。アイデアをいただければ幸いです。