web-dev-qa-db-fra.com

Android: Orientation d'aperçu de la caméra en mode portrait

J'utilise l'appareil photo pour afficher l'aperçu uniquement (ne pas prendre de photos ni enregistrer des vidéos).

L'application est toujours en mode portrait (le mode paysage est désactivé). L'aperçu de la caméra est toujours tourné à 90 degrés CCW et je ne peux pas le changer (ni avec setDisplayOrientation ni avec p.set("orientation", "portrait" ) et p.set("rotation", 90) ).

L'aperçu a-t-il toujours fait pivoter comme celui-ci ou dépend de l'appareil? Si c'était toujours comme celui-ci en mode portrait, je pouvais simplement faire pivoter l'image après.

Ou existe-t-il un moyen de configurer la caméra correctement? J'ai lu beaucoup de threads à ce sujet mais aucune réponse n'a fonctionné pour moi (Galaxy S2, Android v2.3)

16
DominicM

Forcer l'orientation portrait:

set Android:screenOrientation="portrait" Dans votre AndroidManifest.xml et appelez camera.setDisplayOrientation(90); avant d'appeler camera.startPreview();

Je n'ai pas testé sur le GS2 mais cela fonctionne sur chaque téléphone que j'ai testé.

REMARQUE: SETDISPLAYLORIENTATION a été ajouté dans Niveau d'API 8

37
smith324

J'ai codé l'application pour uniquement le mode portrait.

camera.setDisplayOrientation(90);

Faire tourner la caméra à tourner à 90 degrés et cela peut entraîner une orientation non appropriée pour certains périphériques dans Android afin d'obtenir le prévisualisation correct pour tous Android= Les appareils utilisent le code suivant qui est arbitré dans le site des développeurs.

Ci-dessous, vous devez envoyer votre activité, Cameraid = dos est 0 et pour la caméra frontale est 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);
} 

Voici comment définir la caméra SETDISPLAYIOMORIENTATION POUR ALL Android.

7
vignesh waran