Question

J'utilise l'appareil photo pour afficher uniquement un aperçu (pas pour prendre des photos ou 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 est-il TOUJOURS pivoté de cette manière ou dépend-il de l'appareil ?Si c'était toujours comme ça en mode portrait, je pourrais simplement faire pivoter l'image par la suite.

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

Était-ce utile?

La solution

Pour forcer l’orientation portrait :

ensemble android:screenOrientation="portrait" dans ton AndroidManifest.xml et appelle camera.setDisplayOrientation(90); avant d'appeler camera.startPreview();

Je n'ai pas testé sur le GS2 mais cela fonctionne sur tous les téléphones sur lesquels j'ai testé.

Note:setDisplayOrientation a été ajouté dans API niveau 8

Autres conseils

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

camera.setDisplayOrientation(90);

Fera la caméra pour tourner à 90 degrés, ce qui peut entraîner une orientation non appropriée pour certains appareils dans Android afin d'obtenir l'aperçu correct pour tous les appareils Android utilisent le code suivant qui est arbitré dans le site des développeurs.

Ci-dessous, vous devez envoyer votre activité, cameraId = back 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 le setDisplayOrientation pour la caméra qui conviendra parfaitement à tous les appareils Android.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top