以横向模式返回 (android.hardware.Camera)
Posted
技术标签:
【中文标题】以横向模式返回 (android.hardware.Camera)【英文标题】:Returning (android.hardware.Camera) in landscape mode 【发布时间】: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 中的方向变化。 【参考方案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() 或(更有效)保留配置更改时的活动实例。
【讨论】:
以上是关于以横向模式返回 (android.hardware.Camera)的主要内容,如果未能解决你的问题,请参考以下文章
仅 iOS 纵向应用程序从 UIWebview youtube 以横向返回