【Android】 Canvas、Path 和 Paint 執行個體 (遊戲開發必備)

來源:互聯網
上載者:User

Canvas類主要實現了螢幕的繪製過程,其中包含了很多實用的方法,比如繪製一條路徑、地區、貼圖、畫點、畫線、渲染文本,下面是Canvas類常用的方法,當然Android開發網提示大家很多方法有不同的重載版本,參數更靈活。

  void drawRect(RectF rect, Paint paint) //繪製地區,參數一為RectF一個地區

  void drawPath(Path path, Paint paint) //繪製一個路徑,參數一為Path路徑對象 

  void  drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)   //貼圖,參數一就是我們常規的Bitmap對象,參數二是來源區域(Android123提示這裡是bitmap),參數三是目的地區域(應該在canvas的位置和大小),參數四是Paint畫刷對象,因為用到了縮放和展開的可能,當原始Rect不等於目標Rect時效能將會有大幅損失。 

  void  drawLine(float startX, float startY, float stopX, float stopY, Paint paint)  //畫線,參數一起始點的x軸位置,參數二起始點的y軸位置,參數三終點的x軸水平位置,參數四y軸垂直位置,最後一個參數為Paint畫刷對象。

  void  drawPoint(float x, float y, Paint paint) //畫點,參數一水平x軸,參數二垂直y軸,第三個參數為Paint對象。
 
         void drawText(String text, float x, float y, Paint paint)  //渲染文本,Canvas類除了上面的還可以描繪文字,參數一是String類型的文本,參數二x軸,參數三y軸,參數四是Paint對象。

  void  drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) //在路徑上繪製文本,相對於上面第二個參數是Path路徑對象

  從上面來看我們可以看出Canvas繪製類比較簡單同時很靈活,實現一般的方法通常沒有問題,同時可以疊加的處理設計出一些效果,不過細心的網友可能發現最後一個參數均為Paint對象。如果我們把Canvas當做繪畫師來看,那麼Paint就是我們繪畫的工具,比如畫筆、畫刷、顏料等等

Paint類常用方法:

 void  setARGB(int a, int r, int g, int b)  設定Paint對象顏色,參數一為alpha透明通道

       void  setAlpha(int a)  設定alpha不透明度,範圍為0~255

 void  setAntiAlias(boolean aa)  //是否消除鋸齒

 void  setColor(int color)  //設定顏色,這裡Android內部定義的有Color類包含了一些常見顏色定義 

 void  setFakeBoldText(boolean fakeBoldText)  //設定偽粗體文本
  
       void  setLinearText(boolean linearText)  //設定線性文本
 
       PathEffect  setPathEffect(PathEffect effect)  //設定路徑效果
 
       Rasterizer  setRasterizer(Rasterizer rasterizer) //設定光柵化
 
       Shader  setShader(Shader shader)  //設定陰影 

 void  setTextAlign(Paint.Align align)  //設定文本對齊

       void  setTextScaleX(float scaleX)  //設定文本縮放倍數,1.0f為原始
  
       void  setTextSize(float textSize)  //設定字型大小
 
       Typeface  setTypeface(Typeface typeface)  //設定字型,Typeface包含了字型的類型,粗細,還有傾斜、顏色等。

 void  setUnderlineText(boolean underlineText)  //設定底線
 
 最終Canvas和Paint在onDraw中直接使用

 @Override   protected void onDraw(Canvas canvas) {    Paint paintRed=new Paint();    paintRed.setColor(Color.Red);    canvas.drawPoint(11,3,paintRed); //在座標11,3上畫一個紅點}

對於Android遊戲開發或者說2D繪圖中來講Path路徑可以用強大這個詞來形容。在Photoshop中我們可能還記得使用鋼筆工具繪製路徑的方法。Path路徑類在位於android.graphics.Path中,Path的構造方法比較簡單,如下

   Path cwj = new Path();  //構造方法

   下面我們畫一個封閉的原型路徑,我們使用Path類的addCircle方法

   cwj.addCircle(10,10,50,Direction.CW); //參數一為x軸水平位置,參數二為y軸垂直位置,第三個參數為圓形的半徑,最後是繪製的方向,CW為順時針方向,而CCW是逆時針方向。

    結合Android上次提到的Canvas類中的繪製方法drawPath和drawTextOnPath,我們繼續可以在onDraw中加入。

   canvas.drawPath(cwj,paintPath); //Android123提示大家這裡paintPath為路徑的畫刷顏色,可以見下文完整的原始碼。

   canvas.drawTextOnPath("Android123 - CWJ",cwj,0,15,paintText); //將文字繪製到路徑中去,有關drawTextOnPath的參數如下:

   方法原型public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint) 
     參數列表:

text  為需要在路徑上繪製的文字內容。 

path 將文字繪製到哪個路徑。 

hOffset   距離路徑開始的距離
            vOffset   離路徑的上下高度,這裡Android開發網提示大家,該參數類型為float浮點型,除了精度為8位小數外,可以為正或負,當為正時文字在路徑的圈裡面,為負時在路徑的圈外面。 
              paint  最後仍然是一個Paint對象用於制定Text本文的顏色、字型、大小等屬性。

  下面是我們的onDraw方法中如何繪製路徑的示範代碼為:

   @Override   protected void onDraw(Canvas canvas) {    Paint paintPath=new Paint();    Paint paintText=new Paint();    paintPath.setColor(Color.Red); //路徑的畫刷為紅色    paintText.setColor(Color.Blue); //路徑上的文字為藍色    Path pathCWJ=new Path();    pathCWJ.addCircle(10,10,50,Direction.CW); // 半徑為50px,繪製的方向CW為順時針    canvas.drawPath(pathCWJ,paintPath);   canvas.drawTextOnPath("Android123 - CWJ",pathCWJ,0,15,paintText); //在路徑上繪製文字  }

   有關路徑類常用的方法如下:

 void  addArc(RectF oval, float startAngle, float sweepAngle)  //為路徑添加一個多邊形
 
       void  addCircle(float x, float y, float radius, Path.Direction dir)  //給path添加圓圈
 
void  addOval(RectF oval, Path.Direction dir)  //添加橢圓形

void  addRect(RectF rect, Path.Direction dir)  //添加一個地區
  
void  addRoundRect(RectF rect, float[] radii, Path.Direction dir)  //添加一個圓角地區
 
boolean  isEmpty()  //判斷路徑是否為空白
  
void  transform(Matrix matrix)  //應用矩陣變換
 
void  transform(Matrix matrix, Path dst)  //應用矩陣變換並將結果放到新的路徑中,即第二個參數。

  有關路徑的進階效果大家可以使用PathEffect類.

/**       * 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);       * 設定帶有刪除線的效果       *        */  

轉載自: http://www.android123.com.cn/androidkaifa/542.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.