web-dev-qa-db-ja.com

CameraXの回転サポートを修正する方法

CameraX画面回転サポートの問題に直面しました。

: see picture

横: see picure

変換コード:

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開発者サイト。

修正のための提案には非常に感謝します。ごきげんよう!

5
Nikita Lapin

CameraX Alpha 06でこの問題が発生しました。MarcinMrugasの回答で解決しました。しかし、Alpha09に移行するとき、私はこのコードを取り除き、ローテーションは問題ありませんでした。したがって、CameraXが回転を単独で処理するようになりました。

0
Jérôme Pietri
0
Mike A

このコードを追加

楽しい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

0
Ange1D