我遇到了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
方法...从Android开发者网站上的cameraX官方指南中获取了此代码。
非常感谢您提出任何修复建议。祝你今天过得愉快!
最佳答案
基于AutoFitPreviewBuilder的解决方案:
preview.onPreviewOutputUpdateListener = Preview.OnPreviewOutputUpdateListener { output ->
// Get all dimensions
val metrics = DisplayMetrics().also { camera_texture_view.display.getRealMetrics(it) }
val previewWidth = metrics.widthPixels
val previewHeight = metrics.heightPixels
val width = output.textureSize.width
val height = output.textureSize.height
val centerX = camera_texture_view.width.toFloat() / 2
val centerY = camera_texture_view.height.toFloat() / 2
// Get rotation
val rotation = when (camera_texture_view.display.rotation) {
Surface.ROTATION_0 -> 0
Surface.ROTATION_90 -> 90
Surface.ROTATION_180 -> 180
Surface.ROTATION_270 -> 270
else -> throw IllegalStateException()
}
val matrix = Matrix()
// Rotate matrix
matrix.postRotate(-rotation.toFloat(), centerX, centerY)
// Scale matrix
matrix.postScale(
previewWidth.toFloat() / height,
previewHeight.toFloat() / width,
centerX,
centerY
)
// Assign transformation to view
camera_texture_view.setTransform(matrix)
camera_texture_view.surfaceTexture = output.surfaceTexture
}