android 文字路径,Android自定义控件:路径及文字

创建路径

canvas中绘制路径利用:

void drawPath (Path path, Paint paint)

直线路径

void moveTo (float x1, float y1):直线的开始点;将直线路径的绘制点定在(x1,y1)的位置;

void lineTo (float x2, float y2):直线的结束点,又是第二次绘制直线路径的开始点;lineTo()可以一直用;

void close ():如果连续画了几条直线,但没有形成闭环,调用Close()会将路径首尾点连接起来,形成闭环;

1 Paint paint = new Paint();

2

3 paint.setColor(Color.BLUE);//设置画笔颜色

4 paint.setStyle(Paint.Style.STROKE);//填充样式改为描边

5 paint.setStrokeWidth(10); //设置画笔宽度

6

7 Path path = new Path();

8

9 path.moveTo(5,5);//设置起始点

10 path.lineTo(10,100);//第一条直线的终点,及第二条直线的起点

11 path.lineTo(200,100);//

12 path.lineTo(400,100);//第三条直线

13 path.close();//闭环

14

15 canvas.drawPath(path,paint);

cf782e6652b3b6f533bd37b91e32c461.png

TIM图片20180823145016.png

矩形路径

void addRect (float left, float top, float right, float bottom, Path.Direction dir)

void addRect (RectF rect, Path.Direction dir)

这里Path类创建矩形路径的参数与上篇canvas绘制矩形差不多,唯一不同点是增加了Path.Direction参数;

Path.Direction有两个值:

6fc76989fbb9f7d1ee6149fc41b38799.png

TIM图片20180823150133.png

Path.Direction.CCW:指创建逆时针方向的矩形路径;

Path.Direction.CW:指创建顺时针方向的矩形路径;

1 Paint paint = new Paint();

2 paint.setColor(Color.BLUE);//设置画笔颜色

3 paint.setStyle(Paint.Style.STROKE);//填充样式改为描边

4 paint.setStrokeWidth(10); //设置画笔宽度

5 //先创建两个不一样的路径

6 //第一个逆向生成

7

8 Path CCWpath = new Path();

9

10 RectF rectF = new RectF(50,50,250,200);

11 CCWpath.addRect(rectF, Path.Direction.CCW);

12

13 //第二个顺向生成

14 Path CWpath = new Path();

15 RectF rectF1 = new RectF(300,50,450,200) ;

16 CWpath.addRect(rectF1, Path.Direction.CW);

17

18

19 // 先画出这两个路径

20 canvas.drawPath(CCWpath,paint);

21 canvas.drawPath(CWpath,paint);

d09fde3b0f996d84e87c9c3cc5165c32.png

TIM图片20180823152108.png

1 Paint paint = new Paint();

2 paint.setColor(Color.BLUE);//设置画笔颜色

3 paint.setTextSize(20);

4 paint.setStyle(Paint.Style.STROKE);//填充样式改为描边

5 paint.setStrokeWidth(1); //设置画笔宽度

6 //先创建两个不一样的路径

7 //第一个逆向生成

8

9 Path CCWpath = new Path();

10

11 RectF rectF = new RectF(50,50,250,200);

12 CCWpath.addRect(rectF, Path.Direction.CCW);

13

14 //第二个顺向生成

15 Path CWpath = new Path();

16 RectF rectF1 = new RectF(300,50,450,200) ;

17 CWpath.addRect(rectF1, Path.Direction.CW);

18

19

20 // 先画出这两个路径

21 canvas.drawPath(CCWpath,paint);

22 canvas.drawPath(CWpath,paint);

23

24 String text = "新手上路,多多努力,一起加油!";

25 paint.setColor(Color.RED);

26 canvas.drawTextOnPath(text,CCWpath,0,10,paint);//文字逆时针生成

27 canvas.drawTextOnPath(text,CWpath,0,10,paint);//文字顺时针生成

aca1e394631ef09f695b84b62dd74c9e.png

TIM图片20180823153151.jpg

文字

构造函数:

void drawText (String text, float x, float y, Paint paint)

void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)

void drawText (String text, int start, int end, float x, float y, Paint paint)

void drawText (char[] text, int index, int count, float x, float y, Paint paint)

1 //普通设置

2 Paint paint=new Paint();

3 paint.setAntiAlias(true); //是否使用抗锯齿功能,如果使用,使绘图速度变慢

4 paint.setStyle(Paint.Style.FILL);//绘图样式,对于设文字和几何图形有效

5 // Style.FILL/Style.FILL_AND_STROKE/Style.STROKE

6 paint.setTextAlign(Paint.Align.CENTER);//s设置文字对齐方式,取值:align.CENTER、align.LEFT或align.RIGHT

7 paint.setTextSize(10);//设置文字大小

8 paint.setStrokeWidth(10);//设置画笔宽度

9

10 //样式设置

11 paint.setFakeBoldText(true);//将水平方向拉伸,高度不变

12 paint.setUnderlineText(true);//设置下划线

13 paint.setTextSkewX((float)-0.5);//设置字体水平倾斜度,普通斜体字是-0.5

14 paint.setStrikeThruText(true);//设置带有删除线效果

15

16 //其他设置

17 paint.setTextScaleX(5);//将水平方向拉伸,高度不变

a86474baa984b7d8e480fe950add4da2.png

TIM图片20180909093213.png

Typeface create(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式

Typeface create(Typeface family, int style) //通过其它Typeface变量来构建文字样式

Typeface createFromAsset(AssetManager mgr, String path) //通过从Asset中获取外部字体来显示字体样式

Typeface createFromFile(String path)//直接从路径创建

Typeface createFromFile(File path)//从外部路径来创建字体样式

Typeface defaultFromStyle(int style)//创建默认字体

1 //普通设置

2 Paint paint=new Paint();

3 paint.setColor(Color.BLUE);

4 paint.setAntiAlias(true); //是否使用抗锯齿功能,如果使用,使绘图速度变慢

5

6 paint.setTextSize(100);//设置文字大小

7 paint.setStrokeWidth(5);//设置画笔宽度

8 //绘图样式,设置为填充

9 paint.setStyle(Paint.Style.FILL);

10 canvas.drawText("加油努力吧!",150,100,paint);

11

12 //绘图样式设置为描边

13 paint.setStyle(Paint.Style.STROKE);

14 canvas.drawText("加油努力吧!",150,200,paint);

15

16 //绘图样式设置为填充并且描边

17 paint.setStyle(Paint.Style.FILL_AND_STROKE);

18 canvas.drawText("加油努力吧!",150,300,paint);

2a2df84a26d7fe0ec994d9e058e2e8b0.png

TIM图片20180825211057.jpg

Style的枚举值如下:

Typeface.NORMAL //正常体

Typeface.BOLD //粗体

Typeface.ITALIC //斜体

Typeface.BOLD_ITALIC //粗斜体

1 //普通设置

2 Paint paint=new Paint();

3 paint.setColor(Color.BLUE);

4 paint.setAntiAlias(true); //是否使用抗锯齿功能,如果使用,使绘图速度变慢

5

6 paint.setTextSize(100);//设置文字大小

7 paint.setStrokeWidth(5);//设置画笔宽度

8 //绘图样式,设置为填充

9 paint.setStyle(Paint.Style.FILL);

10 canvas.drawText("加油努力吧!",150,100,paint);

11

12 paint.setFakeBoldText(true);//将水平方向拉伸,高度不变

13 paint.setUnderlineText(true);//设置下划线

14 paint.setStrikeThruText(true);//设置带有删除线效果

15

16 paint.setTextSkewX((float)-0.5);//设置字体水平倾斜度,普通斜体字是-0.5

17 canvas.drawText("加油努力吧!",150,200,paint);

18

19

20 paint.setTextSkewX((float)0.5);//设置字体水平倾斜度,普通斜体字是-0.5

21 canvas.drawText("加油努力吧!",150,300,paint);

d8d865c94cd1e890996d3acaf5273b9f.png

TIM图片20180825214706.jpg

1 //普通设置

2 Paint paint=new Paint();

3 paint.setColor(Color.BLUE);

4 paint.setAntiAlias(true); //是否使用抗锯齿功能,如果使用,使绘图速度变慢

5

6 paint.setTextSize(50);//设置文字大小

7 paint.setStrokeWidth(5);//设置画笔宽度

8 //绘图样式,设置为填充

9 paint.setStyle(Paint.Style.FILL);

10 canvas.drawText("加油努力吧!",10,50,paint);

11

12 paint.setTextScaleX(2);//水平方向拉伸,高度不变

13 canvas.drawText("加油努力吧!",10,100,paint);

14

15

16 //写在同一位置,同颜色,看高度是否不变

17

18

19 paint.setTextScaleX(1);//先还原拉伸效果

20 canvas.drawText("加油努力吧!",10,150,paint);

21

22 paint.setColor(Color.RED);

23 paint.setTextScaleX(2);//重新设置拉伸效果

24 canvas.drawText("加油努力吧!",10,200,paint);

3c9c13e8b4ddc494bc9fdaef84e67631.png

TIM图片20180826161306.png

使用系统中的字体

Typeface defaultFromStyle(int style)//创建默认字体

Typeface create(String familyName, int style) //直接通过指定字体名来加载系统中自带的文字样式

1 //普通设置

2 Paint paint=new Paint();

3 paint.setColor(Color.BLUE);

4 paint.setAntiAlias(true); //是否使用抗锯齿功能,如果使用,使绘图速度变慢

5

6 paint.setTextSize(100);//设置文字大小

7 paint.setStrokeWidth(5);//设置画笔宽度

8 //绘图样式,设置为填充

9 paint.setStyle(Paint.Style.FILL);

10

11 String familyName = "宋体";

12 Typeface font = Typeface.create(familyName,Typeface.NORMAL);

13 paint.setTypeface(font);

14 canvas.drawText("努力加油",10,100, paint);

c4b165b1f3a97c6eb76ec2da92cb2cb6.png

TIM图片20180909093256.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值