[解決済み] Android - カメラのプレビューが横向きになっている
質問
カメラが見ているものを画面に表示するためにプレビューを使用しています。
サーフェイスの作成、サーフェイスの設定、サーフェイスの表示と、すべてうまく動作しています。
しかし、ポートレート モードでは、常に不正確な 90 度の角度で画像が表示されます。
写真のような
以下のコードを使用すると、画像がまっすぐになることは承知しています。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
しかし、私はプレビューを他の要素を含むアクティビティ内に持っており、私のアクティビティがランドスケープモードで表示されることは意味を成しません。(デフォルトでは無効になっています)
そこで、プレビューの方向を変更する方法はないでしょうか。そして、私の活動の残りの部分はポートレート モードで正しく表示されたままにしておくことはできますか?
または、正しく表示されるようにプレビューを回転させる方法はありますか?
どのように解決するのですか?
この問題は、あるハードウェアのバグとして始まったようです。 こちらをご覧ください。 が、API 8 で利用可能な mCamera.setDisplayOrientation(degrees) の呼び出しを使用することによって克服することができます。そのため、私はこの方法で実装しています。
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Parameters parameters = mCamera.getParameters();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.setParameters(parameters);
previewCamera();
}
And the previewCamera method :
public void previewCamera() {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
isPreviewRunning = true;
} catch(Exception e) {
Log.d(APP_CLASS, "Cannot start preview", e);
}
}
これは HTC Desire 上でのことで、私は当初、回転が何であるかを言うために、それぞれの回転チェックにロギング ステートメントを入れなければなりませんでした。そして、デバイス上でデバッグし、デバイスを回転させながら logCat 出力を見ました。HTC Desireの場合、0度は期待通りの携帯電話(縦向き)、90度は携帯電話を90度反時計回りに回転させました(私は時計回りに回転させると想定していたのです)。このコードでは、携帯電話が90度や180度になったときにディスプレイを回転させる必要がないことがわかると思いますが、これはデバイスが自分で処理しているようです。ただ一点、正常に動作していない点があります。270 度の回転は、デバイスを時計回りに 90 度回転させたときで、ディスプレイの回転は OK ですが、デバイスを反時計回りに 270 度回転させた場合は、適切に補正されないようです。
追記: 適切な回転で幅と高さが入れ替わっていることに注意してください。
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] 文字サイズとアンドロイドの画面サイズの違い
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
-
[解決済み] AndroidでTextViewの下にアンダーラインを引くには
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] WhatsAppでメッセージを送信する