美文网首页IT面试Android技术知识Android开发
Android 对图片Drawable进行变色

Android 对图片Drawable进行变色

作者: 牧童遥指2000 | 来源:发表于2017-08-21 23:42 被阅读113次

    Android 图片DrawableCompat利用setTint()对图片Drawable进行变色

    1.利用color资源对Drawable变色

    Drawable对象的来源不限制,可以是从资源getResource().getDrawable(int resourceId)也可以是其他的方式得到的Drawable

    Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTint(wrappedDrawable, color);
    
    

    2.采用ColorStateList来改变Drawable

    
    Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
    DrawableCompat.setTintList(wrappedDrawable, colors);
    
    

    3.介绍一下ColorStateList

    <?xml version="1.0" encoding="utf-8"?>  
    <selector xmlns:android="http://schemas.android.com/apk/res/android">  
        <item android:state_pressed="true"  
              android:color="#ffff0000"/> <!-- pressed -->  
        <item android:state_focused="true"  
              android:color="#ff0000ff"/> <!-- focused -->  
        <item android:color="#ff000000"/> <!-- default -->  
    </selector>  
    
    

    Java代码(用于改变按钮的字体颜色)

     
    
    Button btn=(Button)findViewById(R.id.btn);  
    Resources resource=(Resources)getBaseContext().getResources();   
    ColorStateList csl=(ColorStateList)resource.getColorStateList(R.color.button_text);  
    if(csl!=null){  
         btn.setTextColor(color_state_list);//设置按钮文字颜色  
    }  
    
    

    4.安利一个朋友封装的工具类

    public class DrawableTintUtil {
    
      /**
       * Drawable 颜色转化类
       *
       * @param drawable 
       * @param color资源
       * @return 改变颜色后的Drawable
       */
      public static Drawable tintDrawable(@NonNull Drawable drawable, int color) {
        Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
        DrawableCompat.setTint(wrappedDrawable, color);
        return wrappedDrawable;
      }
    
      /**
       * Drawable 颜色转化类
       *
       * @param drawable 源Drawable
       * @param ColorStateList
       * @return 改变颜色后的Drawable
       */
      public static Drawable tintListDrawable(@NonNull Drawable drawable, ColorStateList colors) {
        Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
        DrawableCompat.setTintList(wrappedDrawable, colors);
        return wrappedDrawable;
      }
    }
    
    
    

    相关文章

      网友评论

      • 东之城:这个难道没有 版本限制???? 兼容性有问题吗????
      • 牧童遥指2000:最近发现的一个比较实用的功能,和大家分享

      本文标题:Android 对图片Drawable进行变色

      本文链接:https://www.haomeiwen.com/subject/cjckdxtx.html