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(捆绑savedInstanceState)和写要更改的捆绑参数这样的应用程序的状态值:

你可以这样

@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"); 
} 

希望这会帮助你.cheers!

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

你可以保持摄像机1对象生存活动死亡和复活,或(较少effocient)破坏相机onStop()或(更高效)在配置更改时保留活动实例。