Прямоугольная рамка с прозрачностью для камеры - PullRequest
0 голосов

Я работаю над приложением Android с пользовательским модулем камеры.Основное назначение пользовательского модуля камеры - добавить наложение на камеру - это должно быть что-то вроде внешней прозрачной рамки (см. Первый прикрепленный рисунок).Это на самом деле размыто на прикрепленной картинке, но мне нужен хотя бы прозрачный эффект, так как размытие не так просто реализовать на Android.

Главное здесь - убедиться, что «чистая» видимая область соответствует формату А4, поэтому высота, деленная на ширину, должна быть √2 (основное назначение приложения - фотографировать листы А4).

desired effect

inverted effect

Я понял, как добиться эффекта «перевернутый» - см. Второе изображение,Но я не могу понять, как можно настроить вид для желаемого эффекта - первое изображение.Может ли кто-нибудь поделиться своими мыслями о проблеме?Вот код:

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>

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

Ответы [ 2 ]

0 голосов

Я нашел статью о том, что мне нужно.Приложив немного усилий, я мог настроить код для получения желаемого эффекта: https://blog.budiharso.info/2016/01/09/Create-hole-in-android-view/

0 голосов
/ 27 ноября 2018

Чтобы избежать хитрых векторных масок, достаточно определить id / overlay как макет с четырьмя полупрозрачными прямоугольниками, используя один и тот же чертеж, который вы используете сейчас: верхний, нижний, левый и правый.Вы можете определить размеры каждого прямоугольника во время выполнения, но если вам нравятся интеллектуальные задачи, вы можете определить их как ConstraintLayout.

...