導航
Paint API之—— Xfermode與PorterDuff全面詳解
Paint API之—— Xfermode與PorterDuff詳解(三)動畫效果
本節(jié)引言:
在繪圖工具類這節(jié)課中,Paint的方法參數(shù)那里我們就接觸到 了這樣幾個東西:Paint.Style,Paint.Cap逼肯,Paint.Join等耸黑,這些都是Paint中的一些枚舉值,相關 方法我們可以通過設置這些枚舉值來設置特定效果比如:Style:畫筆樣式篮幢,Join圖形結合方式等大刊, 本節(jié)我們走進Paint的源碼,我們來一一介紹這些枚舉值三椿,另外我們也順道講下這個ShadowLayer 設置帶陰影效果的Paint缺菌!打開Paint類的源碼,我們可以看到下述這些枚舉值:
1.get枚舉用法:
不知大家對枚舉陌生還是熟悉搜锰,這里把貼下Paint.Style相關的調用代碼(帶有參構造方法的枚舉) 伴郁,讓大家體會體會:
public enum Style {
//定義枚舉,通過括號賦值
FILL (0),
STROKE (1),
FILL_AND_STROKE (2);
//有參構造方法
Style(int nativeInt) {
this.nativeInt = nativeInt;
}
final int nativeInt;
}
//設置畫筆Style的方法
public void setStyle(Style style) {
native_setStyle(mNativePaint, style.nativeInt);
}
//JNI設置畫筆風格的方法,這里我們無需關注
private static native void native_setStyle(long native_object, int style);
1.Paint.Style
作用:畫筆的樣式 可選值:
- FILL:填充內部(默認)
- STROKE:只描邊
- FILL_AND_STROKE:填充內部與描邊
方法調用:setStyle(Paint.Style style) 對應效果:
2.Paint.Cap
作用:筆觸風格蛋叼,設置畫筆始末端的圖形(畫筆開始畫的第一點與最后一點) 可選值:
- BUTT:筆觸是長方形且不超過路徑(默認)
- ROUND:筆觸是圓形
- SQUARE:筆觸是正方形
方法調用:setStrokeCap(Paint.Cap cap)
對應效果:平時我們直接畫的是第一個焊傅,其他兩個會比普通的多一點而外的區(qū)域,第二個 是圓角狈涮,第三個是矩形狐胎!
3.Paint.Join
作用:設置接合處的狀態(tài),比如你的線是由多條小線拼接而成歌馍,拼接處的形狀 可選值:
- MITER:接合處為銳角(默認)
- ROUND:接合處為圓弧
- BEVEL:接合處為直線
方法調用:setStrokeJoin(Paint.Join join)
另外還有個setStrokeMiter(float miter)是設置筆畫的傾斜度握巢,miter > = 0; 如:小時候用的鉛筆松却,削的時候斜與垂直削出來的筆尖效果是不一樣的暴浦。 主要是用來設置筆觸的連接處的樣式〔M剩可以和setStrokeJoin()來比較比較肉渴。
4.Paint.Align
作用:設置繪制文本的對其方式,就是相對于繪制文字的[x,y]起始坐標 可選值:
- LEFT:在起始坐標的左邊繪制文本
- RIGHT:在起始坐標的右邊繪制文本
- CENTER:以其實坐標為中心繪制文本
方法調用:setTextAlign(Paint.Align align)
對應效果:另外可調用setTextSize()設置繪制文本的大小~
5.Paint.FontMetrics和Paint.FontMetricsInt
字體屬性及測量带射,另外這兩個方法是一樣的同规,只是后者取到的值是一個整形, 這里我們選FontMetricsInt來給大家講解下窟社,有下面這五個常量值券勺,這里參考的基準點是: 下劃線的位置(Baseline)
- top:最高字符到baseline的距離,即ascent的最大值
- ascent:字符最高處的距離到baseline的值
- descent:下劃線到字符最低處的距離
- bottom:下劃線到最低字符的距離灿里,即descent的最大值
- leading:上一行字符的descent到下一行的ascent之間的距離
我們看幾個圖幫助理解下:
然后我們隨意畫一串字母关炼,把這些值打印出來: canvas.drawText("abcdefghijklnmopqrstuvwxyz", 400, 400, mPaint1);
Log.e("HEHE", mPaint1.getFontMetricsInt().toString());
運行下,我們可以看到匣吊,打印出來的Log如下:
看完思考思考儒拂,畫一畫寸潦,應該不難理解!這里我們知道下就好社痛,如果你想更 深入研究见转,可以參考下這篇:Android字符串進階之三:字體屬性及測量(FontMetrics)
6.ShadowLayer設置陰影效果
我們在TextView那一節(jié)就教過大家為TextView的文本設置陰影效果,而Paint其實也提供了設置 陰影效果的API:setShadowLayer(float radius, float dx, float dy, int shadowColor)
參數(shù):radius為陰影的角度蒜哀,dx和dy為陰影在x軸和y軸上的距離斩箫,shadowColor為陰影的顏色 我們可以寫個非常簡單的句子驗證下:
mPaint1.setShadowLayer(5,0,0,Color.BLACK);
canvas.drawText("畢竟基神~", 400, 400, mPaint1); //繪制文字
效果如下:
另外我們還可以調用clearShadowLayer()來清除這個陰影層~
7.字體Typeface(字型)
- 常用的字體類型名稱還有:
- Typeface.DEFAULT //常規(guī)字體類型
- Typeface.DEFAULT_BOLD //黑體字體類型
- Typeface.MONOSPACE //等寬字體類型
- Typeface.SANS_SERIF //sans serif字體類型
- 常用的字體風格名稱還有:
- Typeface.BOLD //粗體
- Typeface.BOLD_ITALIC //粗斜體
- Typeface.ITALIC //斜體
- Typeface.NORMAL //常規(guī)
1.在xml中設置。
使用android:typeFace來設置:Android:typeface=”sans”
2.在Java程序中:
eg1:
Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
p.setTypeface( font );
eg2:
String familyName = “宋體”;Typeface font = Typeface.create(familyName,Typeface.BOLD);p.setTypeface(font);
使用外部字體
1.首先吧要使用的字體文件拷貝到assets下的fonts目錄下撵儿。
2.代碼如下:
private void mySetTypeFace() {
// TODO Auto-generated method stub
//從assert中獲取有資源乘客,獲得app的assert,采用getAserts()淀歇,通過給出在assert/下面的相對路徑易核。在實際使用中,字體庫可能存在于SD卡上房匆,可以采用createFromFile()來替代createFromAsset耸成。
Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HanYi.ttf");
//title是之間定義的控件
title.setTypeface(face);