android tint着色器(蒙层/阴影等)

来源:互联网 发布:博罗县网络问政杨村镇 编辑:程序博客网 时间:2024/06/01 09:25

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)