1

完全に正常に動作するコンパス アプリを作成しましたが、問題は 1 つだけで、それはアニメーションです。基本的には、SensorEventListener で matrix.setRotate onSensorChanged メソッドを使用して ImageView(ニドル画像) を回転させています。ニドルは回転していますが、非常に速いペースで、良くないようです。私が欲しいのは、画像を低速で回転させることです。コンパスに組み込まれたiPhoneのように。あなたの専門家のアドバイスが必要です。

privateSensorEventListener mySensorEventListener= newSensorEventListener() {
            .
            .
            .
public void onSensorChanged(SensorEvent event) {
            .
            .
            .
            azimuth= (int) event.values[0];
            allowRotating=true;
            dialer.post(new RotateRunnable(azimuth));
            .
            .
            .
}};        

センサーデータが変更された場合に呼び出される Runnable

private class RotateRunnable implementsRunnable {

    private int Degrees;    
    public Rotate Runnable(intDegrees) {
        this.Degrees= Degrees;
    }

    public void run() {
        if(allowRotating) {
            rotateDialer(Degrees);
            dialer.post(this);
        }
    }

}

画像を回転させる方法

private void rotateDialer(int Degrees) {

    matrix.setRotate(360-Degrees, dialerWidth/ 2, dialerHeight/ 2);
    dialer.setScaleType(ScaleType.MATRIX);
    dialer.setImageMatrix(matrix);
    allowRotating=false;
}
4

1 に答える 1

1

センサーの変化を平均化すると、アニメーションが滑らかになると思います。

azimuth = ((azimuth + (int)event.values[0]) / 2);

もちろん、値の配列を保持し、より楽しい演算を行うことで、常により洗練されたものにすることができます。

http://en.wikipedia.org/wiki/平均

于 2012-08-02T12:13:12.060 に答える