当useFullBleedPreview = false时,CWAC-CAMERA位置预览在可用预览区域的顶部

时间:2014-06-03 15:28:31

标签: android commonsware-cwac

我正在尝试使用cwac-v9-camera中的CameraFragment创建自定义相机片段拍摄和预览方形图像。

我希望预览和拍摄的照片完全相同,所以: 1.我使用FullBleedPreview = false 2.我希望预览图片占据全宽,需要将我的预览图片放在预览区域的最顶部,这样我就可以用一些视图覆盖剩下的图像,使其成为正方形。

问题是CameraView在相机预览区域的中央绘制图像,并在顶部和底部添加白线。

有没有办法控制小说绘制预览图片的位置?

2 个答案:

答案 0 :(得分:2)

我有同样的问题,花了一天时间在这个CWAC库上(顺便说一句,这绝对是好的)。我想分享我的研究,希望你(和我)很快就会得到一个有效的解决方案。

测试平台:Sony Xperia Z,Android 4.2.2

测试分辨率: 1080x1920

可用预览: 1280x720 960x720 ,720x480, 704x576 ,640x480,480x320,320x240,176x144。

目标预览尺寸: 1080x1080 ,当然是正方形:D

在我的自定义CameraHost的CameraHost.getPreviewSize()内完成测试。

  1. 如果我在这里为超类功能提供方形视图/大小,我得到 704x576 。它是11:9(或1.22222~),最接近1:1或1.0。但是,当放大到1080宽度并且也会变形时,它看起来很模糊。

  2. 1280x720是16:9(1.777~)。设备相机通过裁剪顶部和底部来获得此功能(请注意,相机正在以横向模式进行通话)。

  3. 960x720是4:3(1.333~)。这是设备相机的全分辨率。这是我的目标分辨率,我只希望将960x720内的720x720朝向上边缘(纵向)或左边缘(风景)。

  4. 在自定义CameraHost(扩展SimpleCameraHost)中,限制预览大小:

    @Override
    public Size getPreviewSize(int orientation, int w, int h, Parameters p) {
        Size size = super.getPreviewSize(orientation, 720, 960, p);
        ViewGroup.LayoutParams params = cameraView.getLayoutParams();
        params.width = 1080;
        params.height = 960 * 1080/720;
        cameraView.setLayoutParams(params);
        return size;
    }
    
  5. layout.xml:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <com.commonsware.cwac.camera.CameraView
            android:id="@+id/cameraView"
            android:layout_width="match_parent"
            android:layout_gravity="top|center_horizontal"
            android:layout_height="match_parent"/>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <com.example.android.widget.SquareView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/transparent"/>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:orientation="vertical"
                android:background="#99e0e0e0">
                (your elements to cover up the extra area)
            </LinearLayout>
        </LinearLayout>
    </FrameLayout>
    
  6. 以下是结果,并与系统相机比较,使用4:3。

    Screen using this code Default camera app with 4:3

    注意:

    1. 我想你知道如何创建自己的SquareView,所以我不会在这里发布它的代码。您可以在此处阅读更多内容:Simple way to do dynamic but square layout
    2. #4中的代码片段只是测试代码 - 您需要弄清楚它是如何适应所有设备的。
    3. 请勿通过CameraView接受点击事件进行对焦。请改用SquareView。

答案 1 :(得分:1)

  

有没有办法控制小说绘制预览图片的位置?

它绘制CameraView所在的图像。精确位于该空间内的位置取决于CameraView的宽高比和预览图像的宽高比,并且无法提前确定。