Полукруглый фон с переводом Z вызывает проблему рендера - PullRequest
0 голосов
/ 03 января 2019

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

Я делал это несколько раз, чтобы мои RecyclerView макеты создавали закругленные углы для каждого View, но теперь это вызвало ошибку рендеринга, так как я использую elevation или translationZ для создания мягкой тени вокруг View.

Ошибка: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed.

Я нашел причину этой ошибки. Кажется, что у Android P есть некоторые проблемы с радиусом угла, как было указано здесь: java.lang.IllegalArgumentException: Invalid Region.Op - только INTERSECT и DIFFERENCE при сбое фона кнопки

Проблема в том, что если я применю android:radius, это изменит радиус для всех 4 углов, чего я не хочу. Есть ли способ сделать его работоспособным?

Вот мой фоновый xml:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@android:color/background_light"/>
    <corners
            android:topLeftRadius="7dp"
            android:bottomLeftRadius="7dp"/>

1 Ответ

0 голосов
/ 03 января 2019

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

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="2dp"
        android:right="2dp">

        <shape android:shape="rectangle">
            <solid android:color="#CABBBBBB" />
            <corners android:radius="2dp" />
        </shape>
    </item>

    <item
        android:bottom="2dp"
        android:left="2dp"
        android:right="0dp"
        android:top="0dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/white" />
            <corners android:radius="2dp" />
        </shape>
    </item>
</layer-list>
...