前言
根據(jù)Gcssloop所學(xué)習(xí)的自定義View整理與筆記线罕。
學(xué)習(xí)之前夜焦,先了解一下Paint文本的常用設(shè)置吧O(∩_∩)O~
//普通設(shè)置
paint.setStrokeWidth (5);//設(shè)置畫筆寬度
paint.setAntiAlias(true); //指定是否使用抗鋸齒功能,如果使用,會使繪圖速度變慢
paint.setStyle(Paint.Style.FILL);//繪圖樣式借宵,對于設(shè)文字和幾何圖形都有效
paint.setTextAlign(Align.CENTER);//設(shè)置文字對齊方式,取值:align.CENTER寺擂、align.LEFT或align.RIGHT
paint.setTextSize(12);//設(shè)置文字大小
//樣式設(shè)置
paint.setFakeBoldText(true);//設(shè)置是否為粗體文字
paint.setUnderlineText(true);//設(shè)置下劃線
paint.setTextSkewX((float) -0.25);//設(shè)置字體水平傾斜度暇务,普通斜體字是-0.25
paint.setStrikeThruText(true);//設(shè)置帶有刪除線效果
paint.setTypeface(Typeface.DEFAULT);// 設(shè)置或清除字體樣式,null為清除
//其它設(shè)置
paint.setTextScaleX(2);//只會將水平方向拉伸怔软,高度不會變
繪制文字垦细,大概有三類方法:
1.第一類只能指定文本基線位置(基線x默認(rèn)在字符串左側(cè),基線y默認(rèn)在字符串下方)
public void drawText (String text, float x, float y, Paint paint)
public void drawText (String text, int start, int end, float x, float y, Paint paint)
public void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
public void drawText (char[] text, int index, int count, float x, float y, Paint paint)
舉個栗子:
private void initView() {
paint = new Paint();
paint.setColor(Color.BLACK);//顏色
paint.setStyle(Paint.Style.STROKE);//設(shè)置樣式
paint.setAntiAlias(true); //是否使用抗鋸齒功能
paint.setTextSize(50); //設(shè)置字體大小
paint.setTypeface(Typeface.DEFAULT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 文本(要繪制的內(nèi)容)
String str = "ABCDEFG";
// 參數(shù)分別為 (文本 基線x 基線y 畫筆)
canvas.drawText(str, 200, 500, paint);
}
再來一個:
String str = "ABCDEFG";
canvas.drawText(str,1,3,200,500,paint);
結(jié)果為BC挡逼,效果圖就不上啦O(∩_∩)O~
2.第二類可以分別指定每個文字的位置,但是坑很多括改,所以少量字符可以,多的就不要用此方法了哦~
//API16廢棄以下方法
public void drawPosText (String text, float[] pos, Paint paint)
public void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
先看看坑吧家坎,再來上代碼
1.必須指定所有字符位置嘱能,否則直接crash掉吝梅,反人類設(shè)計
2.性能不佳,在大量使用的時候可能導(dǎo)致卡頓
3.不支持emoji等特殊字符惹骂,不支持字形組合與分解
char[] chars=new char[]{'A','B','C','D','E','F'};
canvas.drawPosText(chars,0,3,new float[]{
100,100,
200,200,
300,300,
400,400,
500,500,
600,600,
},paint);
3.根據(jù)路徑繪制文字,感覺好厲害苏携,有木有,??接下來对粪,看看是哪位吧~
public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
public void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
但是右冻,path還沒接觸呢,所以我們會在下一篇中先講path用法著拭,然后繼續(xù)根據(jù)路徑繪制文字O(∩_∩)O~
一步一步纱扭,不要著急,終會拿下