重新启动自定义相机,在预览模式下进行更改时,从横向到纵向或纵向到横向,我的Surface类代码如下所示:
PreviewSurface.java:-
public class PreviewSurface extends SurfaceView implements SurfaceHolder.Callback { public static final String LOG_TAG = "CameraPreview"; private SurfaceHolder mSurfaceHolder; private Camera mCamera; // Constructor that obtains context and camera @SuppressWarnings("deprecation") public PreviewSurface(Context context,Camera camera) { super(context); this.mCamera = camera; this.mSurfaceHolder = this.getHolder(); this.mSurfaceHolder.addCallback(this); this.mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); this.mSurfaceHolder.setFixedSize(100,100); } @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { try { Camera.Parameters parameters = mCamera.getParameters(); if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation","portrait"); mCamera.setDisplayOrientation(90); parameters.setRotation(90); mCamera.setPreviewDisplay(surfaceHolder); mCamera.startPreview(); } else { // This is an undocumented although widely known feature parameters.set("orientation","landscape"); // For Android 2.2 and above mCamera.setDisplayOrientation(0); // Uncomment for Android 2.0 and above parameters.setRotation(0); } mCamera.setPreviewDisplay(surfaceHolder); mCamera.startPreview(); } catch (IOException e) { // left blank for now } } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { mCamera.stopPreview(); mCamera.release(); } @Override public void surfaceChanged(SurfaceHolder surfaceHolder,int format,int width,int height) { try { Camera.Parameters parameters = mCamera.getParameters(); if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) { parameters.set("orientation","portrait"); mCamera.setDisplayOrientation(90); parameters.setRotation(90); } else { // This is an undocumented although widely known feature parameters.set("orientation","landscape"); // For Android 2.2 and above mCamera.setDisplayOrientation(0); // Uncomment for Android 2.0 and above parameters.setRotation(0); } mCamera.setPreviewDisplay(surfaceHolder); mCamera.startPreview(); } catch (IOException e) { // left blank for now } } }
我可以知道我在哪里做错了,我在代码中错过了什么?
解决方法
您必须处理应用程序的配置更改.
将此行添加到AndroidManifest.xml.
android:configChanges="keyboardHidden|orientation|screenSize"
This tells the system what configuration changes you are going to handle yourself – in this case by doing nothing.
希望它有助于ツ