Android: Camera preview orientation in portrait mode

前端 未结 2 1236
隐瞒了意图╮
隐瞒了意图╮ 2020-12-09 10:25

I\'m using the camera to show preview only (not to take pictures or record videos).

The app is always in portrait mode (landscape mode is disabled). The camera previ

相关标签:
2条回答
  • 2020-12-09 10:28

    To force portrait orientation:

    set android:screenOrientation="portrait" in your AndroidManifest.xml and call camera.setDisplayOrientation(90); before calling camera.startPreview();

    I have not tested on the GS2 but it works on every phone I have tested on.

    Note: setDisplayOrientation was added in API Level 8

    0 讨论(0)
  • 2020-12-09 10:41

    I have coded the app for only Portrait Mode.

    camera.setDisplayOrientation(90);
    

    Will make the Camera to rotate to 90 degree and This may result in not suitable Orientation for some devices in android In order to get the Correct Preview for all android devices use the following code which is refereed in developers site.

    Below you have to send your activity, cameraId = back is 0 and for Front camera is 1

    public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) {
        android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();
        android.hardware.Camera.getCameraInfo(cameraId, info);
        int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
        int degrees = 0;
        switch (rotation) {
            case Surface.ROTATION_0:
                degrees = 0;
                break;
            case Surface.ROTATION_90:
                degrees = 90;
                break;
            case Surface.ROTATION_180:
                degrees = 180;
                break;
            case Surface.ROTATION_270:
                degrees = 270;
                break;
        }
    
       int result;
        //int currentapiVersion = android.os.Build.VERSION.SDK_INT;
            // do something for phones running an SDK before lollipop
            if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                result = (info.orientation + degrees) % 360;
                result = (360 - result) % 360; // compensate the mirror
            } else { // back-facing
                result = (info.orientation - degrees + 360) % 360;
            }
    
        camera.setDisplayOrientation(result);
    } 
    

    This is how to set the setDisplayOrientation for camera which will perfectly for all android devices.

    0 讨论(0)
提交回复
热议问题