如何使基于角的渐变可绘制

Posted

技术标签:

【中文标题】如何使基于角的渐变可绘制【英文标题】:how to make corner based gradient drawable 【发布时间】:2020-07-31 06:35:48 【问题描述】:

我正在尝试制作仅位于右下角的渐变背景。 (对不起图片,因为我没有足够的内联代表)

https://i.stack.imgur.com/ebgWn.jpg

首先,我做了径向渐变,但并不完美

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient
        android:centerX="0.9"
        android:centerY="1"
        android:endColor="#00000000"
        android:gradientRadius="40%p"
        android:startColor="#BF000000"
        android:type="radial" />
</shape>

看起来像:

https://i.stack.imgur.com/JOqFf.jpg

然后,我做了线性渐变,但仍然不完美。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <gradient
        android:angle="315"
        android:endColor="#CD000000"
        android:startColor="#00FFFFFF"
        android:type="linear" />
</shape>

https://i.stack.imgur.com/a0y9C.jpg

因为 gradientRadius 参数不适用于线性渐变。此渐变是否有任何起点/终点参数?感谢您的帮助!

【问题讨论】:

为什么不将时间和刻度视图包裹在布局中,并仅在此布局中添加线性渐变背景.. 【参考方案1】:

我用过的最好的

<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
        android:centerX="0.8"
        android:centerY="1"
        android:endColor="#00000000"
        android:gradientRadius="80%p"
        android:startColor="#BF000000"
        android:type="radial" />

然后将你的TextView 和 Tick Icon 包装在一个布局中,并将上面的背景设置为它..

如果您想要与图像中提供的完全相同的效果,那么您最好使用图像或矢量文件。但方法是将背景设置为仅包裹布局而不是根。

【讨论】:

以上是关于如何使基于角的渐变可绘制的主要内容,如果未能解决你的问题,请参考以下文章

在图像中混合渐变填充角的算法

如何将渐变可绘制设置为 FloatingActionButton 上的 backgroundTint 属性

如何正确地将 Figma 圆锥(又名径向)渐变转换为 android 矢量可绘制?

如何在 SKShapeNode 中绘制渐变?

如何让带有渐变的矢量可绘制对象在 < API 24 中工作?

在屏幕上绘制渐变