Ich habe eine Kamera App erstellt und möchte meine App in allen 4 möglichen Ausrichtungen drehen lassen und die Kameravorschau entsprechend aktualisieren. Dafür habe ich die folgende Methode verwendet, die ich von kopiert habe: Android - Camera preview is sidewaysAndroid: Bildschirmausrichtung/Rotation für Kamera Vorschau
public void updateCameraDisplay(int w, int h) {
// set preview size and make any resize, rotate or
// reformatting changes here
Log.i("CameraPreviews", "Updating camera orientation with w=" + w
+ " and h=" + h);
Parameters parameters = camera.getParameters();
Display display = getActivity().getWindowManager()
.getDefaultDisplay();
int rotation = getActivity().getResources().getConfiguration().orientation;
Log.i("CameraPreviews", "rotation is " + display.getRotation());
if (display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(0);
}
if (display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(270);
}
if (display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(180);
}
if (display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(90);
}
try {
camera.setParameters(parameters);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ich die Werte tweeked habe, so dass sie auf der Galaxie tab2 Samsung testete schließlich die richtigen Orientierungen bestimmt und alle Werke zu erhalten. Als ich es auf HTTPS Handy versuchte funktioniert es überhaupt nicht !!!!! Alle Orientierungen sind total falsch! Ich bin also zu dem Schluss gekommen, dass es sich um 2 Gerätetypen handeln muss (oder mehr ... bitte nein!), Da die Drehung angibt, um wie viel Grad der Bildschirm von seiner "Standard" -Position gedreht wurde, dann haben einige Geräte eine Standardposition und andere andere. Wie kann ich über diese Standardrotation herausfinden und entsprechend in meinem Code handeln? ej: defaultOrientation = some Code if (defaultOrientation == 0) ... sonst ....
Bildschirmausrichtung Verriegelung ist außer Frage. Ziel api> = 11 Dank viel
EDIT: ich meinen Code geändert haben:
public void updateCameraDisplay(int w, int h) {
// set preview size and make any resize, rotate or
// reformatting changes here
Log.i("CameraPreviews", "Updating camera orientation with w=" + w
+ " and h=" + h);
Parameters parameters = camera.getParameters();
Display display = getActivity().getWindowManager()
.getDefaultDisplay();
int rotation = getActivity().getResources().getConfiguration().orientation;
Log.i("CameraPreviews", "screen rotation is " + rotation);
Log.i("CameraPreviews", "display rotation is " + display.getRotation());
if (display.getRotation() == Surface.ROTATION_0) {
if (rotation == Configuration.ORIENTATION_LANDSCAPE) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(0);
} else {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(90);
}
}
else if (display.getRotation() == Surface.ROTATION_90) {
if (rotation == Configuration.ORIENTATION_PORTRAIT) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(270);
} else {
parameters.setPreviewSize(w, h);
//camera.setDisplayOrientation(0);
}
}
else if (display.getRotation() == Surface.ROTATION_180) {
if (rotation == Configuration.ORIENTATION_LANDSCAPE) {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(180);
}else {
parameters.setPreviewSize(h, w);
camera.setDisplayOrientation(270);
}
}
else if (display.getRotation() == Surface.ROTATION_270) {
if (rotation == Configuration.ORIENTATION_PORTRAIT) {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(90);
} else {
parameters.setPreviewSize(w, h);
camera.setDisplayOrientation(180);
}
}
try {
camera.setParameters(parameters);
} catch (Exception e) {
e.printStackTrace();
}
}
funktioniert besser auf HTC One S und Samsung Galaxy Tab, solange wir nicht drehen die Telefon im Portrait-Modus auf den Kopf gestellt
Ich denke, für die richtige Umsetzung müssen Sie auch Gerätehöhe/-breite berechnen ... Mit der Kombination von Winkel und Gerät aktuelle Höhe/Breite können Sie genaue Position ermitteln – dreamcoder
Verwenden Sie ExifInterface, um die Ausrichtung ..it funktioniert gut für mich, aber ich habe meinen Code in keinem HTC-Gerät getestet. – Biplab
2 Gerätetypen: http://stackoverflow.com/a/35431231/192373 –