1. 程式人生 > >Canvas抗鋸齒方法兩種

Canvas抗鋸齒方法兩種

轉:抗鋸齒方法兩種(其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true))



在Android中,目前,我知道有兩種出現鋸齒的情況。   ①當我們用Canvas繪製點陣圖的時候,如果對點陣圖進行了選擇,則點陣圖會出現鋸齒。   ②在用View的RotateAnimation做動畫時候,如果View當中包含有大量的圖形,也會出現鋸齒。我們分別以這兩種情況加以考慮。 
◆用Canvas繪製位的的情況。在用Canvas繪製點陣圖時,一般地,我們使用drawBitmap函式家族,在這些函式中,都有一個Paint引數,要做到防止鋸齒,我們就要使用到這個引數。如下:首先在你的建構函式中,需要建立一個Paint。Paint mPaint = new Paint(); 然後,您需要設定兩個引數: 1)mPaint.setAntiAlias();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時,會有抗鋸齒的效果。