kotlin Android -如何更改可绘制路径的颜色?

fgw7neuy  于 2023-06-24  发布在  Kotlin
关注(0)|答案(3)|浏览(114)

我有一个像这样的向量

<vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="16dp"
    android:height="16dp"
    android:viewportWidth="16"
    android:viewportHeight="16">
    <path
        android:pathData="M8,8m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"
        android:fillColor="#1c1c1c" />
    <path
        android:pathData="m6.7,12 l-3.7,-3.3 1.3,-1.5 2.3,2 4.9,-5.3 1.5,1.3z"
        android:fillColor="#fff" />
</vector>

默认情况下看起来像这样:

我想改变颜色的圆圈编程(基本上是第一个路径的fillColor),并保持白色的刻度。
我试图改变可绘制的颜色(通过使用marker.setTint(tintColor)marker.setTintMode(PorterDuff.Mode.XOR)或任何其他tintMode的变体),但无论我选择什么或尝试什么tintMode组合,我都无法改变圆圈的颜色。
改变蜱虫的颜色,或者应用正确的颜色,但随后也显示载体的形状(基本上是正方形)。

j9per5c4

j9per5c41#

您可以通过更改第一个路径的fillColor属性来创建两个不同版本的drawable,并根据您的条件使用其中一个。
例如,创建一个check_primary.xml

android:fillColor="@color/primary"

check_error.xml,其中:

android:fillColor="@color/error"

然后根据需要在代码中使用它们:

if (some_condition)
    setDrawable(check_primary)
else
    setDrawable(check_error)
xt0899hw

xt0899hw2#

here you can change using android:fillColor:-
<vector
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="16dp"
    android:height="16dp"
    android:viewportWidth="16"
    android:viewportHeight="16">
    <path
        android:pathData="M8,8m-8,0a8,8 0,1 1,16 0a8,8 0,1 1,-16 0"
        android:fillColor="#FF0000" /> <!-- Change the fill color here -->
    <path
        android:pathData="m6.7,12 l-3.7,-3.3 1.3,-1.5 2.3,2 4.9,-5.3 1.5,1.3z"
        android:fillColor="#00FF00" /> <!-- Change the fill color here -->
</vector>
gcuhipw9

gcuhipw93#

Drawable drawable = getResources().getDrawable(R.drawable.your_drawable);
int color = getResources().getColor(R.color.your_color);

// Create a new drawable with the specified color
Drawable colorDrawable = DrawableCompat.wrap(drawable).mutate();
DrawableCompat.setTint(colorDrawable, color);

// Set the new drawable to your ImageView or any other view
imageView.setImageDrawable(colorDrawable);

在本例中,将R.drawable.your_drawable替换为可绘制对象的资源ID,将R.color.your_color替换为要应用的颜色的资源ID。
getDrawable()方法从资源中检索原始的可绘制对象。然后,我们使用DrawableCompat.wrap()创建一个名为colorDrawable的新可绘制对象,以确保与旧Android版本的兼容性。调用mutate()方法来创建可绘制对象的一个新示例,以便任何后续修改都不会影响具有相同资源的其他可绘制对象。
最后,我们使用来自DrawableCompat的setTint()设置所需的颜色,传递colorDrawable和所需的颜色。
然后可以使用setImageDrawable()方法将修改后的drawable设置为ImageView或任何其他视图。
通过执行以下步骤,您可以以编程方式更改Android中可绘制对象路径的颜色。

相关问题