Tint

来源:互联网 发布:交换机上联端口配置 编辑:程序博客网 时间:2024/05/21 22:51

Android5.0才提供Drawable.setTint方法,而Android5.0之前的则只能使用v4中的

Drawable.setTint方法了;

 

Drawable对象与ConstantState对象

① Drawable是一个可绘制的对象或者叫做可渲染的对象,里面保存的是可以绘制的数据,其可能是一张位图BitmapDrawable、也可能是一个图形ShapeDrawable、还可以是一个颜色ColorDrawable等等;

已知直接子类:BitmapDrawable/ClipDrawable/ColorDrawable……..

已知间接子类:AnimationDrawable/PaintDrawable/StateListDrawable……..

④ Drawable对象主要的功能就是给canvas上面绘制图形,也可以理解为渲染canvas,这主要通过Drawable对象的draw方法来实现;

⑤ Drawable对象还可以设置给View对象作为背景,如果Drawable类对象的属性被修改了,Drawable对象可以通知关联的View对象重新绘制View对象,这是通过DrawableinvalidateSelf方法来实现的,invalidateSelf方法调用关联的Drawable.CallbackinvalidateDrawable方法;

每个Drawable对象都关联一个ConstantState类型的对象,这是为了保存所有Drawable类对象的一些恒定不变的属性,例如:如果从同一个resourse中创建的Drawable类对象,为了节约内存,它们会共享同一个ConstantState类型的对象,一个ColorDrawable 类对象,它会关联一个ColorState 类对象,color的颜色值是保存在 ColorState类对象中的。如果修改 ColorDrawable的颜色值,会修改到 ColorState的值,会导致和 ColorState关联的所有的 ColorDrawable的颜色都改变。在修改 ColorDrawable的属性的时候,需要先调用 public Drawable mutate()方法,让 Drawable复制一个新的 ConstantState对象关联,mutate就是为了新建一个ConstantState类型的对象;

 

给图片修改颜色

DrawableCompat.setTintList(Drawable , ColorStateList);

 

ColorStateList对象可以通过ColorStateList.valueOf(Color.parseColor("#颜色代码")

<?xml version="1.0" encoding="utf-8"?>  

<selector xmlns:android="http://schemas.android.com/apk/res/android">  

    <item android:color="@color/red" android:state_focused="true" />

    <item android:color="@color/gray" />

</selector>  

getResources().getColorStateList(R.color.edittext_tint_colors)来生成

参考资料

Drawable 着色的后向兼容方案

0 0
原创粉丝点击