Paint枚舉、常量值咧织、陰影效果亏镰、字體

導航

Android Paint之顏色過濾器

Paint之shader(圖像渲染)

Paint之PathEffect(路徑效果)

Paint API之—— MaskFilter(面具)

android之繪圖工具類詳解

Paint API之—— Xfermode與PorterDuff全面詳解

Paint API之—— Xfermode與PorterDuff詳解(三)動畫效果

Paint枚舉、常量值拯爽、陰影效果索抓、字體

本節(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);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末报亩,一起剝皮案震驚了整個濱河市浴鸿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弦追,老刑警劉巖岳链,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異劲件,居然都是意外死亡掸哑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門零远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苗分,“玉大人,你說我怎么就攤上這事牵辣∷ぱⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵纬向,是天一觀的道長择浊。 經常有香客問我,道長逾条,這世上最難降的妖魔是什么琢岩? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮师脂,結果婚禮上担孔,老公的妹妹穿的比我還像新娘江锨。我一直安慰自己,他們只是感情好糕篇,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布泳桦。 她就那樣靜靜地躺著,像睡著了一般娩缰。 火紅的嫁衣襯著肌膚如雪灸撰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天拼坎,我揣著相機與錄音浮毯,去河邊找鬼。 笑死泰鸡,一個胖子當著我的面吹牛债蓝,可吹牛的內容都是我干的。 我是一名探鬼主播盛龄,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饰迹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了余舶?” 一聲冷哼從身側響起啊鸭,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匿值,沒想到半個月后赠制,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡挟憔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年钟些,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绊谭。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡政恍,死狀恐怖,靈堂內的尸體忽然破棺而出达传,到底是詐尸還是另有隱情篙耗,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布趟大,位于F島的核電站鹤树,受9級特大地震影響,放射性物質發(fā)生泄漏逊朽。R本人自食惡果不足惜罕伯,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叽讳。 院中可真熱鬧追他,春花似錦坟募、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至单雾,卻和暖如春赚哗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硅堆。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工屿储, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人渐逃。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓够掠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茄菊。 傳聞我的和親對象是個殘疾皇子疯潭,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容