Android: ориентация/поворот экрана для предварительного просмотра камерыAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android: ориентация/поворот экрана для предварительного просмотра камеры

Сообщение Anonymous »

Я создал приложение камеры и хочу, чтобы мое приложение поворачивалось во всех четырех возможных направлениях и соответствующим образом обновляло предварительный просмотр камеры. для этого я использовал следующий метод, который скопировал:
Android — предварительный просмотр камеры сбоку

Код: Выделить всё

 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();
}
}
}
Я подправил значения, протестировал их на Samsung Galaxy Tab2, чтобы наконец получить правильную ориентацию, и все работает. Когда я попробовал это на телефоне htc one s, оно вообще не работает!!!!! Все ориентации совершенно неверны! Итак, я пришел к выводу, что должно быть два типа устройств (или больше... пожалуйста, нет!), потому что поворот показывает, на сколько градусов экран был повернут от положения «по умолчанию», тогда некоторые устройства имеют одно положение по умолчанию, а другие - другое. Как я могу узнать об этой ротации по умолчанию и действовать соответствующим образом в своем коде?
ej:
defaultOrientation=некоторый код
if(defaultOrientation==0) ...
иначе ....

о блокировке ориентации экрана не может быть и речи.
target api>=11
большое спасибо

EDIT:
Я изменил свой код на:

Код: Выделить всё

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();
}
}
лучше работает на вкладках htc one s и samsung galaxy, если не поворачивать телефон в портретном режиме вверх тормашками

Подробнее: https://stackoverflow.com/questions/134 ... ra-preview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»