我试图在我的应用程序中实现相机,但我发现方向预览一直是横向的,但我的应用程序是纵向的,所以我需要它进入纵向模式我找到了一些类似的解决方案
mCamera.setDisplayOrientation(90);
它与 Galaxy tab2 和 htc 配合得很好,但是当我在索尼 xperia sola 中测试它时,它显示奇怪,听到我添加了它的图像屏幕
你可以看到相机的预览只显示在屏幕的右侧
但是当我从这个应用程序拍照时,它显示正常。我不知道这是什么问题,任何人都可以帮助我。
我试图在我的应用程序中实现相机,但我发现方向预览一直是横向的,但我的应用程序是纵向的,所以我需要它进入纵向模式我找到了一些类似的解决方案
mCamera.setDisplayOrientation(90);
它与 Galaxy tab2 和 htc 配合得很好,但是当我在索尼 xperia sola 中测试它时,它显示奇怪,听到我添加了它的图像屏幕
你可以看到相机的预览只显示在屏幕的右侧
但是当我从这个应用程序拍照时,它显示正常。我不知道这是什么问题,任何人都可以帮助我。
您可以尝试强制表面大小(和位置) - 我遵循此路径来补偿 2.2 版三星 Galaxy S 中的类似错误。当设备升级到 2.3 时修复了该错误。
我使用以下代码解决了这个问题:
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_width="match_parent"
android:layout_height="match_parent" />
似乎这是一个与相机上当前预览大小设置的纵横比和要显示它的surfaceView区域相关的错误。您可以通过简单地将 的值更改aspectRatio()
为某些固定值(例如100
.