Просмотр с рисованным прозрачным фоном без использования родительского цвета - PullRequest
0 голосов
/ 26 апреля 2018

Контекст:

У меня есть макет ограничения с цветом фона с прямоугольником внутри, который имеет прозрачный фон.

Я бы хотел, чтобы фон прямоугольника не наследовал цвет родителя и, по сути, не имел цвета. Однако прозрачный не работает, поскольку он показывает родительский цвет.

Смотрите скриншот:

enter image description here

Макет ограничения:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="false"
    android:background="@color/black"
    android:orientation="vertical">

  <View
      android:id="@+id/rectangleOverlay"
      android:layout_width="0dp"
      android:layout_height="0dp"
      android:layout_marginBottom="306dp"
      android:layout_marginEnd="65dp"
      android:layout_marginStart="65dp"
      android:layout_marginTop="10dp"
      android:background="@drawable/overlay_rectangle"
      app:layout_constrainedWidth="true"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Прямоугольник:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rectangle_shape">
  <stroke android:width="2dp" android:color="@color/white" />
  <padding android:left="2dp"
      android:top="2dp"
      android:right="2dp"
      android:bottom="2dp" />
  <corners android:radius="5dp" />
  <solid android:color="@android:color/transparent" />
</shape>

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Как насчет использования списка слоев, который можно нарисовать , как своего рода фоторепортаж?

Пурпурный нижний слой на следующем рисунке предназначен только для демонстрационных целей:

enter image description here

Если вы удалите item, содержащий прямоугольник пурпурного цвета, у вас будет черная рамка и прозрачная центральная область

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:id="@+id/remove_me"
            android:shape="rectangle">
            <solid android:color="#ff00ff"/>
        </shape>
    </item>
    <item>
        <shape
            android:id="@+id/rectangle_frame"
            android:shape="rectangle">
            <stroke
                android:width="40dp"
                android:color="@color/black"/>

            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>
    <item
        android:bottom="38dp"
        android:left="38dp"
        android:right="38dp"
        android:top="38dp">
        <shape
            android:id="@+id/rectangle_shape"
            android:shape="rectangle">
            <stroke
                android:width="2dp"
                android:color="#00ff00"/>
            <padding
                android:bottom="42dp"
                android:left="42dp"
                android:right="42dp"
                android:top="42dp"/>
            <corners android:radius="5dp"/>
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>
</layer-list>
0 голосов
/ 26 апреля 2018

Прозрачный означает, что он буквально не имеет цвета, общая процедура заключается в том, что он «наследует» цвет фона своего родительского представления.

Если вам не нужно такое поведение, вам придется либо изменить макет, чтобы rectangleOverlay не являлся дочерним элементом вашего черного макета, либо явно назначить значение цвета для вашего rectangleOverlay.

...