2012-05-18 6 views
13

Ich verwende die Kamera, um nur die Vorschau anzuzeigen (nicht um Bilder aufzunehmen oder Videos aufzunehmen).Android: Kamera Vorschauausrichtung im Hochformat

Die App befindet sich immer im Hochformat (Querformat ist deaktiviert). Die Kamera-Vorschau wird immer um 90 Grad gedreht CCW und ich kann es nicht (weder mit setDisplayOrientation noch mit p.set("orientation", "portrait") und p.set("rotation", 90)) ändern.

Ist die Vorschau immer so gedreht oder ist es geräteabhängig? Wenn es immer so Im Hochformat konnte ich das Bild einfach drehen

Oder gibt es eine Möglichkeit, die Kamera richtig einzurichten? Ich habe viele Threads darüber gelesen, aber keine Antwort funktionierte für mich (Galaxy s2, Android v2.3)

+0

FYI Mein Samsung YP-G70 (Galaxy Player 5.0) ist immer im Querformat. – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over hoffe, dies wird Ihnen helfen .. –

Antwort

31

Um Hochformat zu erzwingen:

gesetzt android:screenOrientation="portrait" in Ihrem AndroidManifest.xml und camera.setDisplayOrientation(90); aufrufen, bevor camera.startPreview();

Aufruf Ich habe nicht auf dem GS2 getestet, aber es funktioniert auf jedem Handy ich getestet haben.

Hinweis: setDisplayOrientation wurde in API Level 8

hinzugefügt
+0

Dieses auf dem Emulator funktioniert, aber nicht auf meine GS2. Aber wenn ich es richtig verstanden habe, muss die Kamera im Hochformat IMMER um 90 ° gedreht werden. Ist das korrekt? Denn dann werde ich es selbst drehen. Dies wäre sowieso ein besserer Weg, weil es auf API Level unter 8 funktionieren würde. – DominicM

+1

** Dies funktioniert nicht auf Samsung Ace **, hier habe ich ein Problem http://stackoverflow.com/questions/19176038/camera- setdisplayorientation-function-is-not-working-for-samsung-galaxy-ace-wi – swiftBoy

+0

Es muss nicht um 90 Grad IMMER gedreht werden. Siehe Antwort hier: http://stackoverflow.com/questions/4697631/android-screen-orientation – Sonhja

5

ich die App für nur Hochformat-Modus codiert haben.

camera.setDisplayOrientation(90); 

wird die Kamera machen, um 90 Grad zu drehen, und dies kann in nicht geeigneten Orientierung für einige Geräte in android Um führen die korrekte Vorschau für alle Android-Geräte zu bekommen verwenden Sie den folgenden Code, der in referierten wird Entwickler-Website.

Im Folgenden finden Sie Ihre Aktivitäten zu senden, cameraId zurück = 0 ist und für Frontkamera ist 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); 
} 

Dies ist, wie die setDisplayOrientation für die Kamera zu setzen, die perfekt für alle Android-Geräte.