J'ai une Motorola Defy OS Android 2.1 et je fais une application avec aperçu de la caméra. Le problème est que la caméra fonctionne bien sur Samsung Galaxy S avec Android 2.1, mais sur Motorola, la caméra est pivotée à 90 degrés. J'ai essayé de faire ceci: mais ça ne fonctionne pas. Je n'ai pas encore trouvé de solution. P> p>
6 Réponses :
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { camera.setDisplayOrientation(90); lp.height = previewSurfaceHeight; lp.width = (int) (previewSurfaceHeight / aspect); } else { camera.setDisplayOrientation(0); lp.width = previewSurfaceWidth; lp.height = (int) (previewSurfaceWidth / aspect); }
Merci pour votre réponse, mais SetDisPlayorIningOrientation fonctionne uniquement pour Android 2.2 ou 2.3 et mon application est en 2.1. Y a-t-il une autre façon de travailler en 2.1 aussi? Si quelqu'un résolut ce problème, veuillez m'aider.
emm. Je l'ai testé sur 2,1 il fonctionne parfaitement. Je pense que tu veux dire mediarrecord.setdisplayorientation - cela est vraiment soutenu en 2.2 ou plus
Camera.setdisplayorientation est uniquement pris en charge à partir de l'API 8 (2.2) Voir développeur.android.com/reference/andrroid/hardware/...
Quelles sont les variables LP et Aspect?
C'est en 2011. Je ne me souviens pas. aspect, c'est Emploio, LP - LayOutParams
Je pense que vous ne pouvez pas faire de paramétrage pour soutenir l'API 2.2 à 2.1. L'API n'a pas dans votre appareil actuel lib. Vous devez passer à 2.2 pour prendre en charge le niveau d'API 8. Au fait, j'essaie également d'utiliser le niveau API 7:
camera.setDisplayOrientation(90);
caméra.setdisPlayLorientation (int) n'existe pas sous 2.1!
Et ce code peut fonctionner, mais échouer dans mon jalon / droïde: ( p> Vous pouvez voir plus dans http://code.google.com/p/android/issues/detail?id=1193#C42 p> p>
Cela fonctionne fantastique pour moi sur mon Orange San Francisco. Merci :)
J'ai trouvé ce code qui fonctionne dans Android 1.6 et plus (fonctionne pour moi en utilisant 2.1 et présentez l'aperçu en mode portrait sans rotation)
public void surfaceCreated(SurfaceHolder holder){ try{ camera = Camera.open(); setDisplayOrientation(camera, 90); camera.setPreviewDisplay(holder); camera.startPreview(); }catch(IOException e){ Log.d("CAMERA", e.getMessage()); } } protected void setDisplayOrientation(Camera camera, int angle){ Method downPolymorphic; try { downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class }); if (downPolymorphic != null) downPolymorphic.invoke(camera, new Object[] { angle }); } catch (Exception e1) { } }
Il y a un code d'exemple officiel pour cela dans l'Android Docs Now (Sous SetDisplayOrientation ()):
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; 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); }
@Fahad Camera ID désigne la caméra arrière ou avant. 0 Pour l'arrière, 1 pour la face avant. Probablement préférable d'utiliser les variables d'instance statique caméra.camerainfo.camera_faCing_back code> et
caméra.camerainfo.camera_faCing_front code>.
@Timmmm jfyi, caméra.setdisplayorientation code> ne fait rien sur le Samsung Galaxy Sii.
@Stevenwolfe Essayez caméra.getparameters (). Sétrotation (résultat); code> après
caméra.setdisplayorientation (résultat); code>
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; 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); }
Cela fonctionne très bien très bien, si le CameraPreview extende une certaine vue, nous devons également inverser les calculs de largeur / hauteur dans la méthode Onlayout.
Réponse présente ici - Stackoverflow.com/Questtions/14066038/...
Ce Réponse peut vous aider