好的,我有一个扩展SurfaceView和覆盖的类
surfaceChanged - 只需调用startPreview
surfaceCreated - 打开相机,编辑params*,设置surfaceHolder
surfaceDestroyed - 调用stopPreview,释放相机
这一切都很有效,因为当方向是肖像:
来自surfaceCreated*
m_camera = Camera.open();
Camera.Parameters p = m_camera.getParameters();
if (getResources().getConfiguration().orientation !=
Configuration.ORIENTATION_LANDSCAPE)
{
p.set("orientation", "portrait");
// CameraApi is a wrapper to check for backwards compatibility
if (CameraApi.isSetRotationSupported())
{
CameraApi.setRotation(p, 90);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,每次方向改变时,它都会调用Camera.open()......正如您所知,这是一项非常昂贵的操作,导致转换不是那么顺利.
当我强制定位到横向时,预览很棒.创建只调用一次,因为预览是横向的,相机始终是用户看到的.但是,我需要一种方法来设置纵向拍摄时实际拍摄的照片的方向.当我强制横向渲染时,表面永远不会被重新创建,并且当相机以纵向方式保持时,参数永远不会被设置.
那么如何才能完成以下任一项(专门)?
当方向发生变化时,保持 onDestroy和onCreate之间的m_camera,以便过渡平滑
强制风景和检测方向改变另一种方式...旋转最终的snaped图片,如果保持纵向.
此外,如果我离开基地,有人能指出我更好的方向吗?谢谢.
android smartphone orientation android-sdk-2.1 android-camera