CameraX画面回転サポートの問題に直面しました。
縦:
横:
変換コード:
private void updateTransform() {
Log.d(TAG, "updateTransform: ");
Matrix matrix = new Matrix();
float centerX = cameraViewTextureV.getWidth() / 2f;
float centerY = cameraViewTextureV.getHeight() / 2f;
switch (cameraViewTextureV.getDisplay().getRotation()) {
case Surface.ROTATION_0:
rotation = 0;
break;
case Surface.ROTATION_90:
rotation = 90;
break;
case Surface.ROTATION_180:
rotation = 180;
break;
case Surface.ROTATION_270:
rotation = 270;
break;
default:
break;
}
matrix.postRotate((float) -rotation, centerX, centerY);
cameraViewTextureV.setTransform(matrix);
}
写真でわかるように、カメラのサポート画面の回転が正しくありません...画面の回転時にupdateTransform
メソッドを呼び出しています...このコードをcameraXの公式ガイドからAndroid開発者サイト。
修正のための提案には非常に感謝します。ごきげんよう!
CameraX Alpha 06でこの問題が発生しました。MarcinMrugasの回答で解決しました。しかし、Alpha09に移行するとき、私はこのコードを取り除き、ローテーションは問題ありませんでした。したがって、CameraXが回転を単独で処理するようになりました。
このコードを追加
楽しいonCreate
viewFinder.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> updateTransform(1920,1080) }
楽しいスタートカメラ
preview.setOnPreviewOutputUpdateListener {
val parent = viewFinder.parent as ViewGroup
parent.removeView(viewFinder)
parent.addView(viewFinder, 0)
viewFinder.surfaceTexture = it.surfaceTexture
updateTransform(1920,1080)
}
楽しいupdateTransform(width:Int、height:Int)
val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
val previewWidth = metrics.widthPixels
val previewHeight = metrics.heightPixels
matrix.postScale(previewWidth.toFloat() / height,previewHeight.toFloat() /width,centerX,centerY)
私のデバイスの解像度は1920x1080です
完全なコードは私のリポジトリにあります CameraX