2020.4.4日清明,全国各民族对对抗新冠肺炎疫情斗争中牺牲的烈士和逝世的同胞举行全国性哀悼活动,全国降半旗,全国人民默哀三分钟。各大新闻app,支付宝等应用软件将首页灰度显示以表对烈士和同胞的哀悼。

实现这个功能其实就是将图片和字体进行一个灰度显示。对于文字的灰度显示过于简单,我们就不实现啦。这篇文章主要是一个图片的灰度显示效果实现。
方式一:Android ImageView控件加载图片灰度显示。
mImageView=findViewById(R.id.iv_image_show);
ColorMatrix colorMatrix=new ColorMatrix();//创建一个颜色矩阵,4*5
colorMatrix.setSaturation(0);//设置饱和度。由源码可知,这里就是对RGB颜色分量进行一顿骚操作。
//由源码可知,ColorMatrixColorFilter主要是用于骚操作过后对颜色值的一个赋值过程,
//构造方法主要调用一个set方法,而set方法主要是调用 System.arraycopy(src.mArray, 0, mArray, 0, 20);
//进行复制
ColorMatrixColorFilter colorMatrixColorFilter=new ColorMatrixColorFilter(colorMatrix);
mImageView.setColorFilter(colorMatrixColorFilter);//交给mImageView
mImageView.setImageResource(R.mipmap.ic_launcher);
方式二:通过bitmap进行重新绘制
private Bitmap toGray(Bitmap bitmap){
//根据原始图片大小创建一个bitmap副本(Android是不允许对原始图片进行操作的)
Bitmap bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);//创建画布
Paint paint = new Paint();//创建画笔
ColorMatrix cm = new ColorMatrix();
cm.setSaturation(0);
ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);
paint.setColorFilter(f);//使画笔成灰色
c.drawBitmap(bitmap, 0, 0, paint);//最后画出来
return bmp;
}
对于视频没播放时是灰色的,其实原理一样,也是对视频封面这一帧图片进行了一个灰色处理。
网友评论