0

私は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;
        }
    }

挿入xValueyValuegetAngle()

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()問題は、モーションイベント中xValueyValueのみが計算されることです。モーションイベントが終了した後も、画像は回転し続けます。そのため、画像の速度が0に達したときから最新の値を取得する必要がありますMotionEvent。アイデアをいただければ幸いです。

4

0 に答える 0