2012-11-21 14 views
11

私はカメラアプリを作成しました。私はアプリを4つの可能な向きに回し、それに応じてカメラプレビューを更新したいと思っています。私は最終的に右方向およびそれすべての作品を取得するには三星銀河TAB2にそれらをテストし、値をtweekedいる Android - Camera preview is sidewaysAndroid:カメラのプレビューのための画面の向き/回転

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(0); 
     } 

     if (display.getRotation() == Surface.ROTATION_90) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(270); 
     } 

     if (display.getRotation() == Surface.ROTATION_180) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
     } 

     if (display.getRotation() == Surface.ROTATION_270) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(90); 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

:そのために私はからコピーした以下の方法を使用していました。私はhtc oneの電話でそれを試してみると、全く動作しません!!!!!すべてのe方向は完全に間違っています!だから私は、スクリーンが "デフォルト"の位置から何度回転したかを表すので、いくつかのデバイスは1つのデフォルトの位置を持っているので、threは2種類のデバイスでなければならないという結論に達しました。その他は別のものです。どのようにしてこのデフォルトのローテーションについて知り、それに応じてコード内で動作するのですか? EJ: defaultOrientation =いくつかのコード (defaultOrientation == 0)の場合...他 ....画面の向きをロック

は論外です。 私は自分のコードを変更した:

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "screen rotation is " + rotation); 
     Log.i("CameraPreviews", "display rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(0); 
      } else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(90); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_90) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(270); 
      } else { 
       parameters.setPreviewSize(w, h); 
       //camera.setDisplayOrientation(0); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_180) { 
      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
      }else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(270); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_270) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(90); 
      } else { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(180); 
      } 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

限り、我々が回転しないようHTC 1つのSとサムスンのギャラクシータブの良い作品> = 11の おかげでたくさん

EDITは ターゲットAPI電話機のポートレートモードを逆にして

+1

私は適切な実装のために、デバイスの高さ/幅も計算する必要があると思います...角度とデバイスの現在の高さ/幅の組み合わせを使用すると、正確な表示位置を把握することができます – dreamcoder

+0

ExifInterfaceを使用して方向を取得します。私のためにうまく動作していますが、HTCデバイスでコードをテストしていません。 – Biplab

+0

2種類のデバイス:http://stackoverflow.com/a/35431231/192373 –

答えて

0

カメラの背面を使用していると仮定して、デバイスの向き、画面とカメラの間の角度、向きの変化を感知する。

重要なことは、製造元が実装したカメラのHALコードがGoogleのプロトコルに準拠しているかどうかです。

関連する問題