閱讀399 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android繪製虛線

有的時候我們需要一種虛線效果,比如圖片的邊框,憤怒的小鳥的飛翔路徑,那麼怎麼繪製這些虛線呢?方法很多,目前我覺得好的有兩種:

一、自己創建模式,一個點一個點的繪製。

二、用Android提供的 DashPathEffect 類來創建模式繪製。

下麵我要演示的就是第二種方法,用Android提供給我的API來繪製。

由於是開發項目的一個小塊,下麵隻能給出部分截圖:

android <wbr>繪製虛線效果
效果如上麵。

下麵看一下核心繪圖代碼:

public void draw(Canvas mcanvas) {
  GameLog.log(Tag, "draw");

  Paint mLinePaint = newPaint();
  mLinePaint.setColor(Color.WHITE);
  mLinePaint.setStyle(Paint.Style.STROKE);

  //繪製模式
  PathEffect effect = new DashPathEffect(new float[] { 1,2, 4, 8}, 1);
  mLinePaint.setAntiAlias(true);
  mLinePaint.setPathEffect(effect);
  mLinePaint.setStrokeWidth(4);

 

  if (GameManager.getState()== GameManager.GameStart) {
   GameLog.log(Tag,"GameStart");
   float[]oldPts = getPts(mOldPoints);
   mCanvas.drawLines(oldPts,mLinePaint);
   prepareLinesData();
   float[]newPts = getPts(mNewPoints);
   mCanvas.drawLines(newPts,mLinePaint);
  }

}
下麵是關於這個DashPathEffect 的一些說明,摘錄的:

DashPathEffect是PathEffect類的一個子類,可以使paint畫出類似虛線的樣子,並且可以任意指定虛實的排列方式.

 

代碼中的float數組,必須是偶數長度,且>=2,指定了多少長度的實線之後再畫多少長度的空白.

如本代碼中,繪製長度1的實線,再繪製長度2的空白,再繪製長度4的實線,再繪製長度8的空白,依次重複.1是偏移量,可以不用理會.

 

簡單介紹下 PathEffect類:

PathEffect是用來控製繪製輪廓(線條)的方式。

PathEffect對於繪製Path基本圖形特別有用,但是它們也可以應用到任何Paint中從而影響線條繪製的方式。

使用PathEffect,可以改變一個形狀的邊角的外觀並且控製輪廓的外表。

Android包含了多個PathEffect,包括:

CornerPathEffect 可以使用圓角來代替尖銳的角從而對基本圖形的形狀尖銳的邊角進行平滑。

DashPathEffect 可以使用DashPathEffect來創建一個虛線的輪廓(短橫線/小圓點),而不是使用實線。你還可以指定任意的虛/實線段的重複模式。

DiscretePathEffect 與DashPathEffect相似,但是添加了隨機性。當繪製它的時候,需要指定每一段的長度和與原始路徑的偏離度。

PathDashPathEffect 這種效果可以定義一個新的形狀(路徑)並將其用作原始路徑的輪廓標記。

下麵的效果可以在一個Paint中組合使用多個Path Effect。

SumPathEffect 順序地在一條路徑中添加兩種效果,這樣每一種效果都可以應用到原始路徑中,而且兩種結果可以結合起來。

ComposePathEffect 將兩種效果組合起來應用,先使用第一種效果,然後在這種效果的基礎上應用第二種效果。

對象形狀的PathEffect的改變會影響到形狀的區域。這就能夠保證應用到相同形狀的填充效果將會繪製到新的邊界中。

最後更新:2017-04-03 12:53:56

  上一篇:go C++ 仿函數/函數指針/閉包lambda
  下一篇:go android自定義button點擊效果