Android:Orientation de l'aperçu de l'appareil photo en mode portrait
-
11-12-2019 - |
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)
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.