1. 程式人生 > >android中Paint的屬性設定以及PathEffect,canvas簡單講解

android中Paint的屬性設定以及PathEffect,canvas簡單講解

Paint的相關設定

  1. // 設定字型顏色
  2.         paint.setColor(Color.RED);  
  3.         // 防鋸齒
  4.         paint.setAntiAlias(true);  
  5.         //設定顏色過濾器,可以在繪製顏色時實現不用顏色的變換效果 
  6.         paint.setColorFilter(ColorFilter);   
  7.         //如果該項設定為true,則影象在動畫進行中會濾掉對Bitmap影象的優化操作,加快顯示 
  8.         //速度,本設定項依賴於dither和xfermode的設定 
  9.         paint.setFilterBitmap(true
    );   
  10.         //當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的粗細度 
  11.         paint.setStrokeWidth(10f);   
  12.         //設定繪製路徑的效果,如點畫線等 
  13.         paint.setPathEffect(PathEffect);   
  14.         //設定影象效果,使用Shader可以繪製出各種漸變效果 
  15.         paint.setShader(Shader);   
  16.         //設定MaskFilter,可以用不同的MaskFilter實現濾鏡的效果,如濾化,立體等 
  17.         paint.setMaskFilter(MaskFilter);   
  18.         //在圖形下面設定陰影層,產生陰影效果,radius為陰影的角度,dx和dy為陰影在x軸和y軸上的距離,color為陰影的顏色 
  19.         paint.setShadowLayer(float radius ,float dx,float dy,int color);   
  20.         //設定畫筆的樣式,為FILL,FILL_OR_STROKE,或STROKE 
  21.         paint.setStyle(Paint.Style);   
  22.         //當畫筆樣式為STROKE或FILL_OR_STROKE時,設定筆刷的圖形樣式,圓形樣式ROUND,或方形樣式SQUARE  BUTT
  23.         paint.setStrokeCap(Paint.Cap);   
  24.         //設定繪製時畫筆與圖形的結合方式,METER\ROUND\BEVEL  平滑效果
  25.         paint.setSrokeJoin(Paint.Join);   
  26.         // 字型下劃線
  27.         paint.setUnderlineText(true);  
  28.         // 暫時不知,有清楚的可以告訴我,謝謝
  29.         paint.setLinearText(true);  
  30.         // 字型加粗
  31.         paint.setFakeBoldText(true);  
  32.         // 防抖動
  33.         paint.setDither(true);  
  34.         // 透明度
  35.         paint.setAlpha(a);  

 paint.setPathEffect(PathEffect);  

PathEffect是用來控制繪製輪廓(線條)的方式。PathEffect對於繪製Path基本圖形特別有用,但是它們也可以應用到任何Paint中從而影響線條繪製的方式。使用PathEffect,可以改變一個形狀的邊角的外觀並且控制輪廓的外表。Android包含了多個PathEffect,

CornerPathEffect:

這個類的作用就是將Path的各個連線線段之間的夾角用一種更平滑的方式連線,類似於圓弧與切線的效果。
一般的,通過CornerPathEffect(float radius)指定一個具體的圓弧半徑來例項化一個CornerPathEffect。

DashPathEffect:

這個類的作用就是將Path的線段虛線化。
建構函式為DashPathEffect(float[] intervals, float offset),其中intervals為虛線的ON和OFF陣列,該陣列的length必須大於等於2,phase為繪製時的偏移量。

DiscretePathEffect:

這個類的作用是打散Path的線段,使得在原來路徑的基礎上發生打散效果。
一般的,通過構造DiscretePathEffect(float segmentLength,float deviation)來構造一個例項,其中,segmentLength指定最大的段長,deviation指定偏離量。

PathDashPathEffect:

這個類的作用是使用Path圖形來填充當前的路徑,其建構函式為PathDashPathEffect (Path shape, float advance, float phase,PathDashPathEffect.Stylestyle)。
shape則是指填充圖形,advance指每個圖形間的間距,phase為繪製時的偏移量,style為該類自由的列舉值,有三種情況:Style.ROTATE、Style.MORPH和
Style.TRANSLATE。其中ROTATE的情況下,線段連線處的圖形轉換以旋轉到與下一段移動方向相一致的角度進行轉轉,MORPH時圖形會以發生拉伸或壓縮等變形的情況與下一段相連線,TRANSLATE時,圖形會以位置平移的方式與下一段相連線。

ComposePathEffect:

組合效果,這個類需要兩個PathEffect引數來構造一個例項,ComposePathEffect (PathEffectouterpe,PathEffect innerpe),表現時,會首先將innerpe表現出來,然後再在innerpe的基礎上去增加outerpe的效果。

SumPathEffect:

疊加效果,這個類也需要兩個PathEffect作為引數SumPathEffect(PathEffect first,PathEffect second),但與ComposePathEffect不同的是,在表現時,會分別對兩個引數的效果各自獨立進行表現,然後將兩個效果簡單的重疊在一起顯示出來。

關於引數phase

在存在phase引數的兩個類裡,如果phase引數的值不停發生改變,那麼所繪製的圖形也會隨著偏移量而不斷的發生變動,這個時候,看起來這條線就像動起來了一樣。

1)填充

      drawARGB(int a, int r, int g, int b)
      drawColor(int color)
      drawRGB(int r, int g, int b)
      drawColor(int color, PorterDuff.Mode mode)

  2)幾何圖形

   canvas.drawArc (扇形)

    canvas.drawCircle(圓)

     canvas.drawOval(橢圓)

     canvas.drawLine(線)

     canvas.drawPoint(點)

     canvas.drawRect(矩形)

     canvas.drawRoundRect(圓角矩形)

     canvas.drawVertices(頂點)

     cnavas.drawPath(路徑)

   3)圖片

       canvas.drawBitmap (點陣圖)

       canvas.drawPicture (圖片)

   4)文字

       canvas.drawText