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

1.需求分析:

  当我们需要同一张图片进行细微处理(eg.图片的颜色变暗、变浅等)时,一般的做法有以下几种:

①通过alpha设置透明度,让一个深颜色的图片变浅  

———— 该方法适合有透明需求时

②通过selector切换图片 

———— 该方法往往伴随着点击等事件。而且若是图片原型相同,仅为改变里面的部分参数如色值等而用此方法,容易造成资源的浪费,以及最后安装包的过于庞大。因此,我们推荐尽量使用代码改变一些参数值。

③ View的覆盖/替换(background、src)

————该方法略显粗苯。但是如果实在想不到好的办法,可使用它。


可能还有其他方法,后期如果遇到会继续补加,这里讲述另一种方法,使用tint着色器实现。


2、效果图(红色部分)

   左边 原型图、右边蒙层图

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


上图中,勋章个数为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)