用于相机的具有透明度的矩形框架

Posted

技术标签:

【中文标题】用于相机的具有透明度的矩形框架【英文标题】:Rectangular frame with transparency for camera 【发布时间】:2019-04-28 09:49:01 【问题描述】:

我正在开发带有自定义相机模块的 android 应用。自定义相机模块的主要目的是为相机添加覆盖 - 它应该类似于外部透明边框(参见第一张附图)。它实际上在附图中是模糊的,但我至少需要透明效果,因为在 Android 上实现模糊并非易事。

这里的重点是保证“清晰”的可见区域对应A4格式,所以高度除以宽度应该是√2(应用的主要目的是拍摄A4纸的照片)。

我已经想出了如何实现“倒置”效果 - 请参见第二张图片。但是我无法理解如何设置视图以获得所需的效果 - 第一张照片。有人可以分享他们对这个问题的看法吗?代码如下:

camera.xml:

<LinearLayout         
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical">

    <RelativeLayout
        android:layout_
        android:layout_
        android:layout_weight="4">

        <FrameLayout
            android:id="@+id/camera_preview"
            android:layout_
            android:layout_ />

        <View
            android:id="@+id/overlay"
            android:layout_
            android:layout_
            android:layout_centerInParent="true"
            android:background="@drawable/overlay"
            android:duplicateParentState="false" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_
        android:layout_
        android:padding="15dp"
        android:background="@android:color/black">

        <Button
            android:id="@+id/button_capture"
            android:layout_
            android:layout_
            android:background="@drawable/capture_button"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />

        <Button
            android:id="@+id/button_close"
            android:layout_
            android:layout_
            android:layout_centerVertical="true"
            android:layout_marginEnd="50dp"
            android:layout_marginRight="50dp"
            android:layout_toLeftOf="@+id/button_capture"
            android:background="@drawable/close" />
  </RelativeLayout>

</LinearLayout>

overlay.xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape">
<solid android:color="#88ffffff" />

【问题讨论】:

【参考方案1】:

我找到了一篇关于我所需要的文章。我可以毫不费力地调整那里的代码以获得所需的效果:https://blog.budiharso.info/2016/01/09/Create-hole-in-android-view/

【讨论】:

【参考方案2】:

为避免棘手的矢量蒙版,只需将 id/overlay 定义为具有 4 个半透明矩形的布局,共享您现在使用的相同可绘制对象:顶部、底部、左侧和右侧。您可以在运行时确定每个矩形的尺寸,但如果您喜欢智力挑战,您可以将它们定义为 ConstraintLayout。

【讨论】:

以上是关于用于相机的具有透明度的矩形框架的主要内容,如果未能解决你的问题,请参考以下文章

android 画布区域,android:canvas绘制一个透明矩形并填充其余区域

如何使相机预览的透明彩色背景散发出一个视图?

用于框架的自定义条组件

反应原生:不透明视图中的透明视图

检测具有透明背景的 UIImage 的裁剪矩形

如何在其他应用程序上显示透明相机覆盖?