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
большое спасибо

РЕДАКТИРОВАТЬ:
Я изменил мой код:

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

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»