Полукруглый фон с трансляциейZ вызывает проблемы с рендерингом

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

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

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

Я нашел причину этой ошибки. Похоже, что у Android P есть некоторые проблемы с угловым радиусом, как было указано здесь: and-diffe">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"/>

person martin1337    schedule 03.01.2019    source источник
comment
Может быть, вы можете вручную нарисовать тень, используя список слоев в вашем background.xml, вместо того, чтобы зависеть от высоты?   -  person Zee    schedule 03.01.2019


Ответы (1)


Один из вариантов — вручную нарисовать тень в файле 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>
person Zee    schedule 03.01.2019