6

私のAndroidアプリにはパノラマ画像があり、TYPE_ORIENTATIONセンサーを使用して電話の動きに応じてこの画像を回転させています。これは、横向きと縦向きの両方で正常に機能しています。これが回転ロジックのコードです。

@Override
public void onSensorChanged(SensorEvent event) {
  switch (event.sensor.getType()) {
  case Sensor.TYPE_ORIENTATION:

    float[] insideval = getValPoints();
    event.values[1]=(float) (event.values[1]*2.8);
    event.values[2]=(float) (event.values[2]*2.8);
    setValPoints(event.values.clone());
        if (insideval != null) {
            float check= insideval[0] - event.values[0];            
            if (-1<=check && check <=1) {
                //Animation stoped      
                this.stopAnimation();
            }else{
                if (getdefaltDeviceOrientation() == ORENTATION_LANDSCAPE) {
                     // Natural Orientation is landscape
                      if (getcurrentDeviceOrientation() == 1) {
                        //ORIENTATION_PORTRAIT
                        startPoint = CGPoint.CGPointMake(insideval[2], insideval[1]);
                                if (insideval[0] < event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[2]+ event.values[2], insideval[1]);
                                } else if (insideval[0] > event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[2]- event.values[2], insideval[1]);
                                }
                            } else if (getcurrentDeviceOrientation() == 2) {
                                //Log.i(TAG, "ORIENTATION_LANDSCAPE");
                                startPoint = CGPoint.CGPointMake(insideval[1], insideval[2]);
                                if (insideval[0] < event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[1]- event.values[1], insideval[2]);
                                } else if (insideval[0] > event.values[0]) {
                                    endPoint = CGPoint.CGPointMake( insideval[1]+event.values[1] ,insideval[2]);                    
                                }
                            }
                        } else if (getdefaltDeviceOrientation() == ORENTATION_PROTRAIT) {
                            // Natural Orientation is portrait

                            if (getcurrentDeviceOrientation() == 1) {
                                //Log.i(TAG, "ORIENTATION_PORTRAIT");
                                startPoint = CGPoint.CGPointMake(insideval[1], insideval[2]);
                                if (insideval[0] < event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[1]+ event.values[1], insideval[2]);
                                } else if (insideval[0] > event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[1]- event.values[1], insideval[2]);
                                }
                            } else if (getcurrentDeviceOrientation() == 2) {
                                //Log.i(TAG, "ORIENTATION_LANDSCAPE");
                                startPoint = CGPoint.CGPointMake(insideval[2], insideval[1]);
                                if (insideval[0] < event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[2]- event.values[2], insideval[1]);
                                } else if (insideval[0] > event.values[0]) {
                                    endPoint = CGPoint.CGPointMake(insideval[2]+event.values[2],insideval[1]);
                                }
                            }
                        }
                        this.drawView();
                    }
                }

                break;
}
}

だから私の問題は、デバイスの向きが逆さまに変わると、画像が間違った方向(正反対の方向)に回転することです。この問題を修正するにはどうすればよいですか?また、デバイスの向きが上下逆に変わると実際に何が起こりますか?
ありがとう。

4

2 に答える 2

6

デバイスの現在の回転を使用するhttp://developer.android.com/reference/android/view/Display.html#getRotation()

4つのオプションROTATION_0、ROTATION_90、ROTATION_180、ROTATION_270のいずれかを返します

于 2012-09-28T10:44:05.813 に答える
0

Yoahの答えは正しいですが、リンクされたドキュメントからDisplayを取得する方法は明らかではありません。

リソース/構成からこれを取得することはできません。代わりに、以下を使用する必要があります。

int rotation = getWindowManager().getDefaultDisplay().getRotation();
于 2020-08-22T22:10:12.340 に答える