Android -对图片Drawable进行变色

来源:互联网 发布:淘宝网灯具城 编辑:程序博客网 时间:2024/05/28 16:04

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;  }}
原创粉丝点击