在 android 中设置显示方向后,相机相机预览不正确
Posted
技术标签:
【中文标题】在 android 中设置显示方向后,相机相机预览不正确【英文标题】:Camera camera preview is not Proper after setdisplayorientation in android 【发布时间】:2012-11-17 07:54:15 【问题描述】:我正在尝试在我的应用程序中实现相机,但我发现方向预览一直是横向的,但我的应用程序是纵向的,所以我需要将它设置为纵向模式,我找到了一些解决方案,例如
mCamera.setDisplayOrientation(90);
它在 Galaxy tab2 和 htc 上运行良好,但是当我在索尼 xperia sola 中测试它时,它显示奇怪,听到我添加了它的图像屏幕
你可以看到相机的预览仅在屏幕右侧显示
但是当我从这个应用程序拍照时,它显示正常。我不知道有什么问题 任何人都可以在这方面帮助我。
【问题讨论】:
你找到解决办法了吗? @seriakillaz 问题依然存在,所以我使用内置相机应用程序来跟踪图片。 【参考方案1】:您可以尝试强制表面大小(和位置) - 我遵循此路径来补偿 2.2 版三星 Galaxy S 中的类似错误。当设备升级到 2.3 时修复了该错误。
【讨论】:
所以问题是我的设备操作系统 ..?(它是 4.0.4) 据我所知,这不是操作系统版本本身的功能。相机是特定于供应商和型号的。但 sw 升级可能会解决问题。 +1 感谢您的回复,但索尼没有为我的设备提供任何更新(这是最新的)所以我正在尝试重新安装 4.0.4 我希望它解决我的问题。再次感谢..【参考方案2】:我使用以下代码解决了这个问题:
class CameraPreview extends SurfaceView implements SurfaceHolder.Callback
[...]
public void show()
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
if (!showing)
showing=true;
try
mCamera = Camera.open();
aspectRatio();
try
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
mCamera.setDisplayOrientation(90);
catch (IOException e)
e.printStackTrace();
catch (Exception e)
e.printStackTrace();
Toast.makeText(getContext(), R.string.text_camera_open_error, Toast.LENGTH_SHORT).show();
private void aspectRatio()
if (!aspect_radio_corrected)
aspect_radio_corrected=true;
Display default_disp=((Activity)getContext()).getWindowManager().getDefaultDisplay();
Camera.Parameters parameters = mCamera.getParameters();
Camera.Size optimalPreviewSize=parameters.getPreviewSize();
FrameLayout.LayoutParams l_params=(FrameLayout.LayoutParams)getLayoutParams();
float ratio = (float) optimalPreviewSize.height / optimalPreviewSize.width;
l_params.width=default_disp.getWidth();
l_params.height=Math.round(l_params.width / ratio);
setLayoutParams(l_params);
requestLayout();
[...]
在我的布局文件上:
<com.socialcoaster.utils.CameraPreview
android:id="@+id/cameraView"
android:background="@android:color/transparent"
android:layout_
android:layout_ />
似乎这是一个与相机上当前预览大小设置的纵横比和要显示它的surfaceView区域相关的错误。您只需将aspectRatio()
的值更改为100
等固定值即可看到。
【讨论】:
以上是关于在 android 中设置显示方向后,相机相机预览不正确的主要内容,如果未能解决你的问题,请参考以下文章