0

Я создаю приложение, которое содержит захват видео с пользовательской камеры с видом на поверхность. Он отлично работает в портретном режиме, но когда я перехожу в альбомный режим, предварительный просмотр камеры переходит на пустой экран.Возврат (android.hardware.Camera) в ландшафтном режиме

Вот код, я использую:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.camera_activity); 

     camera1 = Camera.open(camId); 
     try { 
      camera1.setPreviewDisplay(surfaceHolder); 
      camera1.startPreview(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

} 

В ConfigurationChanged функции я не получаю camera1 объект.

Как я могу это решить?

+1

Прочитайте [this] (https://developer.android.com/guide/topics/resources/runtime-changes.html) об изменении ориентации ориентации на Android. – NonCreature0714

ответ

0

Вам необходимо переопределить onSaveInstanceState (Bundle savedInstanceState) и записывать значения состояния приложения, которые вы хотите, чтобы изменить параметр Bundle, как это:

Вы можете сохраненный экземпляр каждой переменной, как этот

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("myBoolean", false); 
    savedInstanceState.putDouble("myDouble", 1.121); 
    savedInstanceState.putInt("myInt", 0); 
    savedInstanceState.putString("myString", "Your String"); 
    // etc. 
} 

и что изменения вы можете получить так:

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("myBoolean"); 
    double myDouble = savedInstanceState.getDouble("myDouble"); 
    int myInt = savedInstanceState.getInt("myInt"); 
    String myString = savedInstanceState.getString("myString"); 
} 

Надеюсь, это поможет вам.

UPDATE:

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
     { 
      p.set("orientation", "portrait"); 
      p.set("rotation",90); 
     } 
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 
     {        
      p.set("orientation", "landscape");   
      p.set("rotation", 90); 
     } 

и установить свойство как это:

Camera.Parameters parameters = camera.getParameters(); 
parameters.set("orientation", "portrait"); 
camera.setParameters(parameters); 
+0

, но он не может сохранить объект camera1 ... –

+0

Я обновляю свои ан. Надеюсь, что вы найдете решение ориентации камеры –

0

Вы можете держать CAMERA1 объект, чтобы выжить активность смерти-воскрешения, или (менее effocient) уничтожить камера onStop() или (более эффективно) сохраняют экземпляр действия при изменении конфигурации.

Смежные вопросы