Paint設置抗鋸齒的方法

在Android中,目前,我知道有兩種出現鋸齒的情況:

  1. 當我們用Canvas繪制位圖的時候,如果對位圖進行了選擇,則位圖會出現鋸齒
  2. 在用View的RotateAnimation做動畫時候,如果View當中包含有大量的圖形,也會出現鋸齒

我們分別以這兩種情況加以考慮

  • 用Canvas繪制位的的情況。在用Canvas繪制位圖時,一般地,我們使用drawBitmap函數家族,在這些函數中,都有一個Paint參數,要做到防止鋸齒,我們就要使用到這個參數
    如下:首先在你的構造函數中,需要創建一個Paint
    Paint mPaint = new Paint();
    然后,您需要設置兩個參數:
  1. mPaint.setAntiAlias(true)
  2. mPaint.setBitmapFilter(true)
    第一個函數是用來防止邊緣的鋸齒,第二個函數是用來對位圖進行濾波處理
    最后,在畫圖的時候,調用drawBitmap函數,只需要將整個Paint傳入即可
  • 有時候,當你做RotateAnimation時,你會發現,討厭的鋸齒又出現了。這個時候,由于你不能控制位圖的繪制,只能用其他方法來實現防止鋸齒。另外,如果你畫的位圖很多,不想每個位圖的繪制都傳入一個Paint;還有的時候,你不可能控制每個窗口的繪制的時候,您就需要用下面的方法來處理——對整個Canvas進行處理
    1)在您的構造函數中,創建一個Paint濾波器
    PaintFlagsDrawFilter mSetfil = newPaintFlagsDrawFilter(0,Paint.FILTER_BITMAP_FLAG);
    第一個參數是你要清除的標志位,第二個參數是你要設置的標志位。此處設置為對位圖進行濾波
    2)當你在畫圖的時候,如果是View則在onDraw當中,如果是ViewGroup則在dispatchDraw中調用如下函數
    canvas.setDrawFilter( mSetfil );

最后,另外,在Drawable類及其子類中,也有函數setFilterBitmap可以用來對Bitmap進行濾波處理,這樣,當你選擇Drawable時,會有抗鋸齒的效果。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容