android tint着色器(蒙层/阴影等)
1.需求分析:
当我们需要同一张图片进行细微处理(eg.图片的颜色变暗、变浅等)时,一般的做法有以下几种:
①通过alpha设置透明度,让一个深颜色的图片变浅
———— 该方法适合有透明需求时
②通过selector切换图片
———— 该方法往往伴随着点击等事件。而且若是图片原型相同,仅为改变里面的部分参数如色值等而用此方法,容易造成资源的浪费,以及最后安装包的过于庞大。因此,我们推荐尽量使用代码改变一些参数值。
③ View的覆盖/替换(background、src)
————该方法略显粗苯。但是如果实在想不到好的办法,可使用它。
可能还有其他方法,后期如果遇到会继续补加,这里讲述另一种方法,使用tint着色器实现。
2、效果图(红色部分)
左边 原型图、右边蒙层图
上图中,勋章个数为0时,要求勋章图片上面布一层蒙层,勋章个数大于0时,才清晰显示
3、实现方法:
tint指定颜色时,必须设置透明度eg.#66000000 ,66就是透明度
① xml中实现
android:tint="#66000000"
如下:<ImageView android:id="@+id/iv_action" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/medal_xingwei" android:tint="#66000000"/>
②java代码实现
/** * 着色 ----蒙层效果 * @param imageView */ public void setTint(ImageView imageView){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//API21,即android5.0 以上 imageView.setImageTintList(null); //或者 imageView.setImageTintList(ColorStateList.valueOf(Color.TRANSPARENT)); }else {//v4包 Drawable up = imageView.getDrawable(); Drawable drawableUp= DrawableCompat.wrap(up); DrawableCompat.setTint(drawableUp, Color.TRANSPARENT); imageView.setImageDrawable(drawableUp); } }
因为我的图片是由带蒙层图 到 原型图的,所以需要将蒙层置null或者设置为transparent
如果需要设置成其他颜色,可以参考其具体使用方法:
eg. public void setImageTintList(ColorStateList tint)