在android中的setdisplayorientation之后,相机相机预览不正确

时间:2012-11-17 07:54:16

标签: android android-camera

我试图在我的应用程序中实现相机,但我发现方向预览是景观中的所有时间但我的应用程序是纵向的所以我需要它在纵向模式我发现了一些类似的解决方案

mCamera.setDisplayOrientation(90); 

它与Galaxy tab2和htc一起工作,但当我在sony xperia sola中测试它显示奇怪听到我添加它的图像屏幕

enter image description here

你可以看到相机的预览只显示屏幕右侧

但是当我从这个应用程序拍照时它显示确定。我不知道是什么问题 任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

您可以尝试强制表面大小(和位置) - 我按照此路径来补偿2.2版Samsung Galaxy S中的类似错误。当设备升级到2.3时,错误已得到修复。

答案 1 :(得分:0)

我使用以下代码解决了这个问题:

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即可看到。