我在我的视图中实现了一个相机,就像它在API演示中完成的一样。但它只适用于横向模式。但这对我来说并不好,因为我想主要在肖像模式下使用它。所以按钮等看起来非常糟糕。如何才能获得一个SurfaceView,它显示了CameraPreview并且一起工作在protrait模式下?
我认为没有必要发布代码,因为我只是使用API演示的代码!
非常感谢!
答案 0 :(得分:3)
如果您未在AndroidManifest.xml文件中指定屏幕方向,则默认显示方向为横向位置,每次旋转手机时,android都会更改所获取的图像,以保持图像与手机对齐。因此,您有两种选择:
1.1。在AndroidManifest.xml文件中指定屏幕方向并设置正确的屏幕方向:
的AndroidManifest.xml:
<activity
android:label="@string/app_name"
android:name=".CameraPreview"
android:screenOrientation="portrait" >
CameraPreview.java:
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(90);
或
的AndroidManifest.xml:
<activity
android:label="@string/app_name"
android:name=".CameraPreview"
android:screenOrientation="landscape" >
CameraPreview.java:
mCamera.setPreviewDisplay(holder);
mCamera.setDisplayOrientation(0);
1.2。不要在AndroidManifest.xml文件中指定屏幕方向,并在每次旋转屏幕时设置正确的屏幕方向:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
int rotation = ((Activity)mCtx).getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0: degrees = 90; break;
case Surface.ROTATION_90: degrees = 0; break;
case Surface.ROTATION_180: degrees = 270; break;
case Surface.ROTATION_270: degrees = 180; break;
}
mCamera.setDisplayOrientation(degrees);
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(w, h);
mCamera.setParameters(parameters);
mCamera.startPreview();
}
但是,既然你似乎已经设计了带按钮等的纵向布局,我认为最好的选择就是第一个。
希望这有帮助和最好的问候。