从可绘制资源更改png图标颜色

时间:2016-05-11 09:19:06

标签: android icons png android-drawable

我在png中有一个drawable图标。它是透明背景的黑色。如何在不添加其他可绘制的情况下更改图标颜色?

7 个答案:

答案 0 :(得分:3)

您可以使用ColorFilter在运行时更改图标颜色。

尝试这样的事情:

    Drawable mIcon= ContextCompat.getDrawable(getActivity(), R.drawable.your_icon);
    mIcon.setColorFilter(ContextCompat.getColor(getActivity(), R.color.new_color), PorterDuff.Mode.MULTIPLY);
    mImageView.setImageDrawable(mIcon);

答案 1 :(得分:2)

你可以试试这个

Drawable mDrawable = context.getResources().getDrawable(R.drawable.yourdrawable); 
mDrawable.setColorFilter(new 
PorterDuffColorFilter(0xffff00,PorterDuff.Mode.MULTIPLY));

答案 2 :(得分:2)

这是一个很好的帮手功能,

public Drawable getTintedDrawable(Resources res,
    @DrawableRes int drawableResId, @ColorRes int colorResId) {
    Drawable drawable = res.getDrawable(drawableResId);
    int color = res.getColor(colorResId);
    drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
    return drawable;
}

Fast Android asset theming with ColorFilter - Dan Lew

答案 3 :(得分:1)

Drawable mDrawable = context.getResources().getDrawable(R.drawable.balloons); 
mDrawable.setColorFilter(new 
PorterDuffColorFilter(0xffff00,PorterDuff.Mode.LIGHTEN));

试试上面你可以玩PorterDuffColorFilter(0xffff00,PorterDuff.Mode.LIGHTEN)      你可以使用Black等。

答案 4 :(得分:1)

尝试使用此静态方法:

public static Drawable changeDrawableColor(Drawable drawable, int color) {
    drawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(drawable, color);
    return drawable;
}

颜色参数可以是资源中的颜色。

答案 5 :(得分:1)

PorterDuff.Mode.SRC_IN

使用此属性可以使用所选的确切颜色更改图标的颜色。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        Drawable mIcon= ContextCompat.getDrawable(this, R.drawable.icon_send);
        mIcon.setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.SRC_IN);
        ibSendMessage.setBackground(mIcon);
}

在较新版本的Android中,您可以使用XML

执行此操作
android:backgroundTint="@color/colorAccent"

答案 6 :(得分:0)

如果更改“ Drawable”,其他使用此“ Drawable资源”的“ ImageView”也将更改,则最好将过滤器应用于单个“ ImageView”。

使用这两个功能,您可以输入所需的颜色作为ID(例如:R.color.white)或颜色代码(例如:#efec0c)。

public void ChangePngIconColor(String Target_Color, ImageView Target_ImageView){
    
    /*
     * Sample: 
     * Target_Color = "#efec0c"; OR Target_Color = "efec0c";
     * 
     */
    
    Target_Color = (Target_Color.startsWith("#")) ? Target_Color : "#"+Target_Color;
    
    Target_ImageView.setColorFilter(Color.parseColor(Target_Color), PorterDuff.Mode.SRC_IN);
}


public void ChangePngIconColor(int Target_Color_ID, ImageView Target_ImageView){
    
    /*
     * Sample: Target_Color = R.color.white;
     * 
     */
    
    Target_ImageView.setColorFilter(ContextCompat.getColor(context,Target_Color_ID), PorterDuff.Mode.SRC_IN);
    
}