1. 程式人生 > >Android 的Paint(畫筆)及Canvas(畫布)

Android 的Paint(畫筆)及Canvas(畫布)

要繪圖,首先得調整畫筆,待畫筆調整好之後,再將影象繪製到畫布上,這樣才可以顯示在手機螢幕上。Android 中的畫筆是 Paint類,Paint 中包含了很多方法對其屬性進行設定,主要方法如下:

   setAntiAlias: 設定畫筆的鋸齒效果。 
   setColor: 設定畫筆顏色 
   setARGB:  設定畫筆的a,r,p,g值。 
   setAlpha:  設定Alpha值 
   setTextSize: 設定字型尺寸。 
   setStyle:  設定畫筆風格,空心或者實心。 
   setStrokeWidth: 設定空心的邊框寬度。 
   getColor:  得到畫筆的顏色 

   getAlpha:  得到畫筆的Alpha值。

  * Paint類介紹 

     *  

     * Paint即畫筆,在繪圖過程中起到了極其重要的作用,畫筆主要儲存了顏色, 

     * 樣式等繪製資訊,指定了如何繪製文字和圖形,畫筆物件有很多設定方法, 

     * 大體上可以分為兩類,一類與圖形繪製相關,一類與文字繪製相關。        

     *  

     * 1.圖形繪製 

     * setARGB(int a,int r,int g,int b); 

     * 設定繪製的顏色,a代表透明度,r,g,b代表顏色值。 

     *  

     * setAlpha(int a);

 

     * 設定繪製圖形的透明度。 

     *  

     * setColor(int color); 

     * 設定繪製的顏色,使用顏色值來表示,該顏色值包括透明度和RGB顏色。 

     *  

    * setAntiAlias(boolean aa); 

     * 設定是否使用抗鋸齒功能,會消耗較大資源,繪製圖形速度會變慢。 

     *  

     * setDither(boolean dither); 

     * 設定是否使用影象抖動處理,會使繪製出來的圖片顏色更加平滑和飽滿,影象更加清晰 

     *  

     * setFilterBitmap(boolean filter);

 

     * 如果該項設定為true,則影象在動畫進行中會濾掉對Bitmap影象的優化操作,加快顯示 

     * 速度,本設定項依賴於dither和xfermode的設定 

     *  

     * setMaskFilter(MaskFilter maskfilter); 

     * 設定MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等       *  

     * setColorFilter(ColorFilter colorfilter); 

     * 設定顏色過濾器,可以在繪製顏色時實現不用顏色的變換效果 

     *  

     * setPathEffect(PathEffect effect); 

     * 設定繪製路徑的效果,如點畫線等 

     *  

     * setShader(Shader shader); 

     * 設定影象效果,使用Shader可以繪製出各種漸變效果 

     *  

     * setShadowLayer(float radius ,float dx,float dy,int color); 

     * 在圖形下面設定陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色 

     *  

     * setStyle(Paint.Style style); 

     * 設定畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE 

     *  

     * setStrokeCap(Paint.Cap cap); 

     * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式,如圓形樣式 

     * Cap.ROUND,或方形樣式Cap.SQUARE 

     *  

     * setSrokeJoin(Paint.Join join); 

     * 設定繪製時各圖形的結合方式,如平滑效果等 

     *  

     * setStrokeWidth(float width); 

     * 當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的粗細度 

     *  

     * setXfermode(Xfermode xfermode); 

     * 設定圖形重疊時的處理方式,如合併,取交集或並集,經常用來製作橡皮的擦除效果 

     *  

     * 2.文字繪製 

     * setFakeBoldText(boolean fakeBoldText); 

     * 模擬實現粗體文字,設定在小字型上效果會非常差 

     *  

     * setSubpixelText(boolean subpixelText); 

     * 設定該項為true,將有助於文字在LCD螢幕上的顯示效果 

     *  

     * setTextAlign(Paint.Align align); 

     * 設定繪製文字的對齊方向 

     *  

   * setTextScaleX(float scaleX); 

    * 設定繪製文字x軸的縮放比例,可以實現文字的拉伸的效果 

     *  

     * setTextSize(float textSize); 

     * 設定繪製文字的字號大小 

     *  

     * setTextSkewX(float skewX); 

     * 設定斜體文字,skewX為傾斜弧度 

     *  

     * setTypeface(Typeface typeface); 

     * 設定Typeface物件,即字型風格,包括粗體,斜體以及襯線體,非襯線體等 

     *  

     * setUnderlineText(boolean underlineText); 

     * 設定帶有下劃線的文字效果 

     *  

     * setStrikeThruText(boolean strikeThruText); 

     * 設定帶有刪除線的效果 

Canvas

當我們調整好畫筆之後,現在需要繪製到畫布上,這就得用Canvas類了。在Android中既然把Canvas當做畫布,那麼就可以在畫布上繪製我們想要的任何東西。除了在畫布上繪製之外,還需要設定一些關於畫布的屬性,比如,畫布的顏色、尺寸等。下面來分析Android中Canvas有哪些功能,Canvas提供瞭如下一些方法:

       Canvas(): 建立一個空的畫布,可以使用setBitmap()方法來設定繪製具體的畫布。
       Canvas(Bitmap bitmap): 以bitmap物件建立一個畫布,則將內容都繪製在bitmap上,因此bitmap不得為null。
       Canvas(GL gl): 在繪製3D效果時使用,與OpenGL相關。
       drawColor: 設定Canvas的背景顏色。
       setBitmap:  設定具體畫布。
       clipRect: 設定顯示區域,即設定裁剪區。
       isOpaque:檢測是否支援透明。
       rotate:  旋轉畫布
       setViewport:  設定畫布中顯示視窗。
       skew:  設定偏移量。

drawRect(RectF rect, Paint paint) //繪製區域,引數一為RectF一個區域 

drawPath(Path path, Paint paint) //繪製一個路徑,引數一為Path路徑物件

drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //貼圖,

引數一就是我們常規的Bitmap物件,二是源區域(這裡是bitmap),三是目標區域(應該在canvas的位置和大小),引數四是Paint畫刷物件,因為用到了縮放和拉伸的可能,當原始Rect不等於目標Rect時效能將會有大幅損失。

drawLine(float startX, float startY, float stopX, float stopY, Paintpaint) //畫線,

引數一起始點的x軸位置,引數二起始點的y軸位置,引數三終點的x軸水平位置,引數四y軸垂直位置,最後一個引數為Paint 畫刷物件。

drawPoint(float x, float y, Paint paint) //畫點,

引數一水平x軸,引數二垂直y軸,第三個引數為Paint物件。

drawText(String text, float x, floaty, Paint paint)  //渲染文字,

Canvas類除了上面的還可以描繪文字,引數一是String型別的文字,參二x軸,參三y軸,引數四是Paint物件。

(RectF oval, Paint paint)//畫橢圓,引數一是掃描區域,引數二為paint物件;

(float cx, float cy, float radius,Paint paint)// 繪製圓,