自定义view时,经常会用到图片绘制,canvas.drawBitmap家族可以说是非常常用的API,不过有时候开发中要求我们的控件在某些页面是一个比例,某些页面是另一个显示比例,例如我遇到的,item的角标,噗……又是这个,在主页面是100%显示,在列表页要85%显示。
对于整体大小的控制,可以想到单独对自定义view里的各个元素宽高属性进行参数控制,但是这样既麻烦,又要写一大堆代码,很少浪费时间,另一个方案就是简单粗暴的对canvas操作,让canvas进行缩放,实现整体大小的改变。
然后我就只加了一行代码,接收一个缩放系数,实现了所需效果,但是问题来了,列表页的item的角标画质降低了,好渣,好吧,这个在之前遇到时是关闭了硬件加速解决的,现在硬件加速本身是关闭的,还要怎样,经过一番搜查,到底是找到了方案,google大神早就有针对这个操作的解决方案,只是没经历过还真不知道这么好用,也是很简单。添加如下两行代码:
private PaintFlagsDrawFilter pfd;
//initView()中
pfd= new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
//针对绘制bitmap添加抗锯齿
mImgPaint.setFilterBitmap(true);
//ondraw()中
/**
* 对canvas设置抗锯齿的滤镜,防止变化canvas引起画质降低
*/
canvas.setDrawFilter(pfd);
canvas.drawBitmap(mTagImg,mWidth-mTagImg.getWidth(),0,mImgPaint);
完美解决。