ImageView
ImageView是Android中的一个图片显示控件,用来加载网络或者本地图片资源。好看的图片可以让应用更被用户接收,如果图片作为应用的装饰,已成为主流,但不是所有的图片显示都符合要求,比如一些特殊时间,特别靓丽的色彩不符合当下假日要求,这个时候如果能让图片变成灰色,这样用助于达到效果。
由于图片基本都是人工在处理,一张图可以直接换资源,如果是千人千面,几十万或者上百张资源根本来不及处理。这时,如果我们能通过色彩过滤,对一些色彩进行置灰,这样在显示上依旧可以达到效果。
ImageView提供了setColorFilter(ColorMatrixColorFilter)方法,通过该方法,对颜色进行过滤。
public ColorMatrixColorFilter(@NonNull ColorMatrix matrix)又是一个Bean类,真正处理色彩的是ColorMatrix
ColorMatrix :
4x5矩阵,用于变换位图的颜色和alpha分量。矩阵可以作为单个数组传递,并按如下方式处理
setSaturation(float sat)方法就是对颜色进行处理,针对的是R/G/B三原色进行混淆
sat:取值是0到1,值越大,色彩饱和越量,为1,是图片的原色,越小,越灰
Android中的color基本有三原色,RGB组成,
000000是黑色,
FFFFFF:白色
源码如下:
public void setSaturation(float sat) {reset();float[] m = mArray;final float invSat = 1 - sat;final float R = 0.213f * invSat;final float G = 0.715f * invSat;final float B = 0.072f * invSat;m[0] = R + sat; m[1] = G; m[2] = B;m[5] = R; m[6] = G + sat; m[7] = B;m[10] = R; m[11] = G; m[12] = B + sat;
}
测试代码:
ColorMatrix colorMatrix = new ColorMatrix();//0-1colorMatrix.setSaturation(progress * 1.0f / 100.0f);ColorMatrixColorFilter colorFilter = new ColorMatrixColorFilter(colorMatrix);imageView.setColorFilter(colorFilter);