3

我试图在我的应用程序中实现相机,但我发现方向预览一直是横向的,但我的应用程序是纵向的,所以我需要它进入纵向模式我找到了一些类似的解决方案

mCamera.setDisplayOrientation(90); 

它与 Galaxy tab2 和 htc 配合得很好,但是当我在索尼 xperia sola 中测试它时,它显示奇怪,听到我添加了它的图像屏幕

在此处输入图像描述

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

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

4

2 回答 2

1

您可以尝试强制表面大小(和位置) - 我遵循此路径来补偿 2.2 版三星 Galaxy S 中的类似错误。当设备升级到 2.3 时修复了该错误。

于 2012-11-17T17:56:21.567 回答
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.

于 2014-11-24T18:18:46.907 回答