Android 相机用透明矩形框

Android 相机用透明矩形框,android,android-layout,android-camera,Android,Android Layout,Android Camera,我正在开发带有自定义摄像头模块的Android应用程序。自定义相机模块的主要目的是在相机上添加覆盖层-它应该是类似外部透明边框的东西(见第一张附加图片)。在附加的图片中,它实际上是模糊的,但我至少需要透明效果,因为模糊在Android上实现并不容易 这里的要点是确保“清晰”可见区域对应于A4格式,因此高度除以宽度应为√2(应用程序的主要用途是拍摄A4纸张的照片) 我已经想出了如何实现“反转”效果——见第二张图。但是,我不知道如何设置视图以获得想要的效果-第一张图片。有人能谈谈他们对这个问题的

我正在开发带有自定义摄像头模块的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_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4">

        <FrameLayout
            android:id="@+id/camera_preview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <View
            android:id="@+id/overlay"
            android:layout_width="316dp"
            android:layout_height="446dp"
            android:layout_centerInParent="true"
            android:background="@drawable/overlay"
            android:duplicateParentState="false" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:background="@android:color/black">

        <Button
            android:id="@+id/button_capture"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:background="@drawable/capture_button"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />

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

</LinearLayout>
<?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" />

overlay.xml:

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4">

        <FrameLayout
            android:id="@+id/camera_preview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <View
            android:id="@+id/overlay"
            android:layout_width="316dp"
            android:layout_height="446dp"
            android:layout_centerInParent="true"
            android:background="@drawable/overlay"
            android:duplicateParentState="false" />
    </RelativeLayout>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="15dp"
        android:background="@android:color/black">

        <Button
            android:id="@+id/button_capture"
            android:layout_width="70dp"
            android:layout_height="70dp"
            android:background="@drawable/capture_button"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />

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

</LinearLayout>
<?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" />


为了避免复杂的矢量遮罩,将id/覆盖定义为具有4个半透明矩形的布局就足够了,它们共享您现在使用的相同可绘制图形:顶部、底部、左侧和右侧。您可以在运行时确定每个矩形的尺寸,但如果您喜欢智力挑战,您可以将它们定义为约束约束约束。我找到了一篇文章,内容与我所需要的一样。我不费吹灰之力就可以调整那里的代码以获得预期的效果: