如何实现drawable局部变色?

How to achieve partially color changing of drawable?

我正在将我的应用程序的设计基础架构更改为 Material 设计组件,并希望实现如下目标:

这来自toggle button,它表明可以对可绘制对象进行部分着色,但是没有实现示例如何实现这一点。 在我的应用程序中,我有一个带有前景色的文本格式工具栏,我需要以这种方式准确显示所选文本颜色。

非常感谢任何建议。

您可以将图标分成两部分(相同大小),例如我们可以从 material icons

中获取“格式颜色文本”图标

然后使用 <layer-list> (LayerDrawable)

简单地将两个可绘制对象合并为一个

ic_format_color_text.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_format_color_text_black_part1_24dp" />
    <item android:drawable="@drawable/ic_format_color_text_black_part2_24dp" />
</layer-list>

现在,此可绘制对象可用作按钮的图标 (MaterialButtonToggleGroup + MaterialButton)。仅对“底部形状”部分着色:

val dr = (colorTextBtn.icon as? LayerDrawable)?.getDrawable(0 /* colored shape layer index*/)
dr?.let { DrawableCompat.setTint(dr, /* color */) }