以编程方式更改形状可绘制的颜色

时间:2014-06-11 14:52:34

标签: android shapedrawable

我需要以编程方式改变形状的颜色...

我正在使用这个

<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/app_theme_blue" />
    <corners android:radius="8dp" />
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>

我需要更改android:color="@color/app_theme_blue"的颜色。 请帮帮我。

1 个答案:

答案 0 :(得分:2)

是的,你可以。它真的非常容易。

首先,请记住,使用白色图像更容易,以便使用中性源应用颜色(因此,想象在透明背景上有白色轮廓)。

Drawable drw = mContext.getResources().getDrawable(R.id.baseDrawable);

这一行的作用就是从资源中获取Drawable(baseDrawable - 无论你喜欢什么,都可以命名)。

接下来,我们将使用setColorFilter()方法的重载,该方法接受两个参数:我们想要的颜色和混合模式。

请注意,默认情况下Drawable是不可变的,因此我们必须使其变为可变,以便对其应用任何变换。

drw.mutate().setColorFilter(finalColor, PorterDuff.Mode.MULTIPLY);

现在您可以专注于您的软件,而无需对同一资源进行多种变换。

顺便说一下,没有API级别要求,它自API级别1开始起作用。

P.S:

这些是必需的导入:

import android.content.Context;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;