安卓自定义View时,处理canvas缩放引起canvas.drawBitmap画质降低

自定义view时,经常会用到图片绘制,canvas.drawBitmap家族可以说是非常常用的API,不过有时候开发中要求我们的控件在某些页面是一个比例,某些页面是另一个显示比例,例如我遇到的,item的角标,噗……又是这个,在主页面是100%显示,在列表页要85%显示。安卓自定义View时,处理canvas缩放引起canvas.drawBitmap画质降低_第1张图片
对于整体大小的控制,可以想到单独对自定义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);

完美解决。

你可能感兴趣的:(自定义View)