2012-05-18 15 views
13

Uso la fotocamera per mostrare solo l'anteprima (non per scattare foto o registrare video).Android: orientamento dell'anteprima della fotocamera in modalità verticale

L'app è sempre in modalità verticale (la modalità orizzontale è disattivata). L'anteprima della fotocamera è sempre ruotata di 90 gradi in senso antiorario e non posso cambiarlo (né con setDisplayOrientation nè con p.set("orientation", "portrait") e p.set("rotation", 90)).

È l'anteprima SEMPRE ruotata come questo o è dipendente dal dispositivo? Se fosse sempre così questo in modalità verticale, potrei semplicemente ruotare l'immagine in seguito

O c'è un modo per impostare correttamente la fotocamera? Ho letto un sacco di discussioni su questo, ma nessuna risposta ha funzionato per me (Galaxy s2, Android v2.3)

+0

FYI Il mio Samsung YP-G70 (Galaxy player 5.0) è sempre in modalità orizzontale. – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over Spero che questo vi aiuterà a .. –

risposta

31

Per forzare l'orientamento verticale:

impostare android:screenOrientation="portrait" nel vostro AndroidManifest.xml e chiamare camera.setDisplayOrientation(90); prima di chiamare camera.startPreview();

non ho ancora testato sul GS2 ma funziona su ogni telefono che ho testato su.

Nota: setDisplayOrientation è stato aggiunto nel API Level 8

+0

Questo funziona sull'emulatore ma non su la mia GS2. Ma se ho capito bene, la fotocamera deve essere SEMPRE ruotata di 90 ° CW in modalità verticale è quella corretta? Perché poi lo ruoterò da solo. Questo sarebbe comunque un modo migliore perché funzionerebbe a livello API inferiore a 8. – DominicM

+1

** Questo non funziona su Samsung Ace **, qui ho postato il problema http://stackoverflow.com/questions/19176038/camera- setdisplayorientation-function-is-not-working-per-samsung-galaxy-ace-wi – swiftBoy

+0

Non deve essere ruotato di 90 gradi SEMPRE. Vedi la risposta qui: http://stackoverflow.com/questions/4697631/android-screen-orientation – Sonhja

5

ho codificato l'applicazione solo per la modalità ritratto.

camera.setDisplayOrientation(90); 

farà la Camera di ruotare di 90 gradi e questo può portare a non adatto orientamento per alcuni dispositivi Android Al fine di ottenere la corretta anteprima per tutti i dispositivi Android utilizzare il seguente codice che viene arbitrato in sito degli sviluppatori.

Qui di seguito è necessario inviare la vostra attività, cameraId = posteriore è 0 e per la macchina fotografica anteriore è 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); 
} 

Questo è come impostare la setDisplayOrientation per la macchina fotografica che sarà perfettamente per tutti i dispositivi Android.

Problemi correlati