【问题标题】:Returning (android.hardware.Camera) in landscape mode以横向模式返回 (android.hardware.Camera)
【发布时间】:2016-10-12 01:58:46
【问题描述】:

我正在构建一个应用,其中包含来自具有表面视图的自定义相机的视频捕获。它在纵向模式下工作正常,但是当我更改为横向模式时,相机预览会进入空白屏幕。

这是我正在使用的代码:

@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 对象。

我该如何解决这个问题?

【问题讨论】:

  • 阅读this,了解如何处理 Android 中的方向变化。

标签: android android-fragments android-camera android-camera2


【解决方案1】:

您需要重写 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");
}

希望这对您有所帮助。干杯!

更新:

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);

【讨论】:

  • 我更新了我的回答。希望你找到相机方向的解决方案
【解决方案2】:

您可以保留 camera1 对象以在 Activity 死亡和复活中幸存下来,或者(效率较低)销毁相机 onStop() 或(更有效)保留配置更改时的活动实例。

【讨论】:

    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 2014-07-01
    • 2012-01-18
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多