1. 程式人生 > >安卓自定義View時,處理canvas縮放引起canvas.drawBitmap畫質降低

安卓自定義View時,處理canvas縮放引起canvas.drawBitmap畫質降低

自定義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);

完美解決。