【问题标题】:CWAC-CAMERA position preview on top of available preview area when useFullBleedPreview = false当 useFullBleedPreview = false 时,CWAC-CAMERA 位置预览在可用预览区域的顶部
【发布时间】:2014-11-02 07:57:30
【问题描述】:

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

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

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

有没有办法控制 lobrary 在哪里绘制预览图?

【问题讨论】:

    标签: android commonsware-cwac


    【解决方案1】:

    我有同样的问题,并在这个 CWAC 库上花了一天时间(顺便说一句,它绝对很棒)。我想分享我的研究,希望您(和我)能尽快找到可行的解决方案。

    测试平台:Sony Xperia Z,Android 4.2.2

    测试分辨率:1080x1920

    可用预览:1280x720960x720、720x480、704x576、640x480、480x320、320x240、176x144。

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

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

    1. 如果我在这里为超类函数提供方形视图/大小,我得到 704x576。它是最接近 1:1 或 1.0 的 11:9(或 1.22222~)。但是,放大到 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>
      

    以下是结果,并与系统相机进行比较,使用 4:3。

    注意:

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

    【讨论】:

      【解决方案2】:

      有没有办法控制 lobrary 在哪里绘制预览图?

      它在CameraView 所在的位置绘制图像。它在该空间内的确切位置取决于CameraView 的纵横比和预览图像的纵横比,无法提前确定。

      【讨论】:

      • 感谢您的回复。但问题是它在 CameraView 的中心绘制了该预览。而问题是:是否可以从CameraView的顶部开始绘制?
      • 那么,这是否意味着在无法自动对焦的手机上无法解决问题?
      • @xp-vit:您的评论在这个问题的上下文中毫无意义。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      相关资源
      最近更新 更多