带有translationZ的半圆形背景导致渲染问题

Posted

技术标签:

【中文标题】带有translationZ的半圆形背景导致渲染问题【英文标题】:Half Rounded background with translationZ causing render problem 【发布时间】:2019-01-03 12:24:59 【问题描述】:

我想为我的主视图创建背景,其中 topLeftbottomLeft 角将被圆角,但右角将是正常的。

我已经为我的RecyclerView 布局多次这样做,以便为每个View 制作圆角,但现在它导致渲染错误,因为我使用elevationtranslationZ 在@ 周围制作软阴影987654328@。

错误:Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed.

我找到了这个错误的原因。似乎 android P 在圆角半径方面存在一些问题,如下所述:java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE in Button background failure

问题是,如果我应用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"/>

【问题讨论】:

也许您可以使用 background.xml 中的图层列表手动绘制阴影,而不是依赖于高程? 【参考方案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>

【讨论】:

以上是关于带有translationZ的半圆形背景导致渲染问题的主要内容,如果未能解决你的问题,请参考以下文章

javascript 更改div的样式以删除阴影文本并显示带有圆形边框的新背景颜色。

Android圆圈背景变成椭圆形

如何制作一个包含在整个屏幕上拉伸的背景图像的颤动应用程序,带有返回句子的图像的圆形按钮?

带背景图像按钮的圆形边框swift

通过单击按钮交替更改圆形按钮背景和文本

带有自动布局(snapkit)的圆形视图?