Android游戲開發(fā)之五:Path路徑類Typeface字體類
Path路徑類
Path 路徑對于Android 2D繪圖或者說Android游戲開發(fā)來說是很重要的。理解Path路徑可以想想在Photoshop中使用鋼筆工具繪制路徑的過程。Path路徑類在位 于android.graphics.Path中,Path的構(gòu)造方法比較簡單,如下:
Path cwj=new Path(); //構(gòu)造方法
下面我們畫一個(gè)封閉的原型路徑,我們使用Path類的addCircle方法。
cwj.addCircle(10,10,50,Direction.CW); //參數(shù)一為x軸水平位置,參數(shù)二為y軸垂直位置,第三個(gè)參數(shù)為圓形的半徑,***是繪制的方向,CW為順時(shí)針方向,而CCW是逆時(shí)針方向。
結(jié)合上次提到的Canvas類中的繪制方法drawPath和drawTextOnPath,我們繼續(xù)可以在onDraw中加入。
canvas.drawPath(cwj,paintPath); //提示大家這里paintPath為路徑的畫刷顏色,可以見下文完整的源代碼。
canvas.drawTextOnPath("Android123 - CWJ",cwj,0,15,paintText); //將文字繪制到路徑中去,有關(guān)drawTextOnPath的參數(shù)如下:
方法原型public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
參數(shù)說明:
text:為需要在路徑上繪制的文字內(nèi)容。
path:將文字繪制到哪個(gè)路徑。
hOffset:距離路徑開始的距離。
vOffset:離路徑的上下高度,這里Android開發(fā)網(wǎng)提示大家,該參數(shù)類型為float浮點(diǎn)型,除了精度為8位小數(shù)外,可以為正或負(fù),當(dāng)為正時(shí)文字在路徑的圈里面,為負(fù)時(shí)在路徑的圈外面。
paint:***仍然是一個(gè)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); //路徑上的文字為藍(lán)色
- Path pathCWJ=new Path();
- pathCWJ.addCircle(10,10,50,Direction.CW); // 半徑為50px,繪制的方向CW為順時(shí)針
- canvas.drawPath(pathCWJ,paintPath);
- canvas.drawTextOnPath("Android123 - CWJ",pathCWJ,0,15,paintText); //在路徑上繪制文字
- }
有關(guān)路徑類常用的方法如下:
void addArc(RectF oval, float startAngle, float sweepAngle) //為路徑添加一個(gè)多邊形
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) //添加一個(gè)區(qū)域
void addRoundRect(RectF rect, float[] radii, Path.Direction dir) //添加一個(gè)圓角區(qū)域
boolean isEmpty() //判斷路徑是否為空
void transform(Matrix matrix) //應(yīng)用矩陣變換
void transform(Matrix matrix, Path dst) //應(yīng)用矩陣變換并將結(jié)果放到新的路徑中,即第二個(gè)參數(shù)。
有關(guān)路徑的高級效果大家可以使用PathEffect類,有關(guān)路徑的更多實(shí)例將在今后的游戲開發(fā)實(shí)戰(zhàn)中講解道。
Typeface字體類
平時(shí)我們在TextView中需要設(shè)置顯示的字體可以通過TextView中的setTypeface方法來指定一個(gè)Typeface對象,因?yàn)锳ndroid的字體類比較簡單,我們列出所有成員方法:
static Typeface create(Typeface family, int style) //靜態(tài)方法,參數(shù)一為字體類型這里是Typeface的靜態(tài)定義,如宋體,參數(shù)二風(fēng)格,如粗體,斜體
static Typeface create(String familyName, int style) //靜態(tài)方法,參數(shù)一為字體名的字符串,參數(shù)二為風(fēng)格同上,這里我們推薦使用上面的方法。
static Typeface createFromAsset(AssetManager mgr, String path) //靜態(tài)方法,參數(shù)一為AssetManager對象,主要用于從APK的assets文件夾中取出字體,參數(shù)二為相對于Android工程下的 assets文件夾中的外掛字體文件的路徑。
static Typeface createFromFile(File path) //靜態(tài)方法,從文件系統(tǒng)構(gòu)造一個(gè)字體,這里參數(shù)可以是sdcard中的某個(gè)字體文件
static Typeface createFromFile(String path) //靜態(tài)方法,從指定路徑中構(gòu)造字體
static Typeface defaultFromStyle(int style) //靜態(tài)方法,返回默認(rèn)的字體風(fēng)格
int getStyle() //獲取當(dāng)前字體風(fēng)格
final boolean isBold() //判斷當(dāng)前是否為粗體
final boolean isItalic() //判斷當(dāng)前風(fēng)格是否為斜體
本類的常量靜態(tài)定義,首先為字體類型名稱:
Typeface DEFAULT
Typeface DEFAULT_BOLD
Typeface MONOSPACE
Typeface SANS_SERIF
Typeface SERIF
字體風(fēng)格名稱:
int BOLD
int BOLD_ITALIC
int ITALIC
int NORMAL
我們將在下節(jié)具體講解onDraw以及什么時(shí)候會(huì)觸發(fā)繪制方法,來實(shí)現(xiàn)我們自定義或子類化控件。