路径和文字

一 Path(路径)

cavas要绘制路径,需要使用Path,void drawPath (Path path, Paint paint),该方法可以绘制指定的path,这里介绍path相关的方法。

1 直线路径

void moveTo (float x1, float y1)
void lineTo (float x2, float y2)
void close ()

以上3个方法用于绘制直线路径,其中moveTo指定一个起始点,随后可以多次调用lineTo来将上一个点于当前点连接,最后可以调用close方法将图形关闭,形成封闭的图形。

这里写图片描述

效果如上图可见。

2 矩形

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

以上两个方法可以添加矩形,但是和之前cavas直接绘制矩形的方法不同的是,这里的path添加矩形多了一个Direction参数,因为path代表路径,所以需要一个绘制的方向,而Direction就是方向。Direction有CCW,CW两个值。
CCW:counter-clockwise,逆时针方向
CW:clockwise,顺时针方向
由于这里只是绘制一个矩形,所以看不出绘制方向的不同带来的区别。

但是如果加上绘制文字,那么就能看出不同

path

图上可以看出,文字在上下两个看起来相同的矩形上,绘制的方向不同。
代码如下:

Path path1 = new Path();
Path path2 = new Path();

path1.addRect(100, 100, 700, 500, Path.Direction.CCW);
path2.addRect(100, 600, 700, 1000, Path.Direction.CW);

mPaint.setColor(Color.BLUE);
canvas.drawPath(path1, mPaint);
canvas.drawPath(path2, mPaint);
String text = "这是一组测试使用的文字";

mPaint.setTextSize(50);
mPaint.setColor(Color.RED);
canvas.drawTextOnPath(text, path1, 0, 10, mPaint);
canvas.drawTextOnPath(text, path2, 0, 10, mPaint);

使用drawTextOnPath方法在指定的路径上绘制文字,绘制的方向跟路径方向一致。

3 圆角矩形

void addRoundRect (RectF rect, float[] radii, Path.Direction dir)
void addRoundRect (RectF rect, float rx, float ry, Path.Direction dir)

上面两个方法都可以绘制圆角矩形,不过第二个方法中,rx,ry分别对应圆角椭圆的x半径和y半径,所以,四个角的圆角都是来自于一个椭圆。
而方法一则不然,参数radii,必须传递进去8个参数,分别代表左上,右上,右下,左下四个角的椭圆半径。也就是从左上角开始顺时针指定。

4 圆形,椭圆,弧形

void addCircle (float x, float y, float radius, Path.Direction dir)

addCircle方法来添加圆形,其中x,y代表圆心,radius代表半径,dir代表方向

void addOval (RectF oval, Path.Direction dir)

addOval方法来添加椭圆,其中oval代表椭圆的外切矩形,dir代表方向。

void addArc (RectF oval, float startAngle, float sweepAngle)

addArc方法添加弧形,oval是弧形所在椭圆的外切矩形,startAngle是其实角度,sweepAngle是扫过的角度。

二 文字

paint设置

//普通设置  
paint.setStrokeWidth (5);//设置画笔宽度  
paint.setAntiAlias(true); //指定是否使用抗锯齿功能,如果使用,会使绘图速度变慢  
paint.setStyle(Paint.Style.FILL);//绘图样式,对于设文字和几何图形都有效  
paint.setTextAlign(Align.CENTER);//设置文字对齐方式,取值:align.CENTER、align.LEFT或align.RIGHT  
paint.setTextSize(12);//设置文字大小  

//样式设置  
paint.setFakeBoldText(true);//设置是否为粗体文字  
paint.setUnderlineText(true);//设置下划线  
paint.setTextSkewX((float) -0.25);//设置字体水平倾斜度,普通斜体字是-0.25,改变符号可以改变倾斜方向。 
paint.setStrikeThruText(true);//设置带有删除线效果  

//其它设置  
paint.setTextScaleX(2);//只会将水平方向拉伸,高度不会变  

canvas方法

1 drawText

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)

如上四个方法都可以直接绘制文字,且比较简单,这里就不做介绍。

2 drawPosText

void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)
void drawPosText (String text, float[] pos, Paint paint)

这两个方法可以单独指定文字的位置,其中index指定第一个绘制文字的索引,count指定需要绘制文字的数量,pos为文字的postion,两个两个一组,分别为x,y轴数值。

3 drawTextOnPath

void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)

沿着路径绘制,该方法中,主要是hOffset以及vOffset比较让人费解,看如下的示例图

path

上图中,可以看到,下面的文字比上面的文字相对矩形更加接近矩形的中心,并且文字起始位置距离矩形左上角有一定距离。

Path path1 = new Path();
Path path2 = new Path();

path1.addRect(100, 100, 700, 500, Path.Direction.CW);
path2.addRect(100, 600, 700, 1000, Path.Direction.CW);

mPaint.setColor(Color.BLUE);
canvas.drawPath(path1, mPaint);
canvas.drawPath(path2, mPaint);
String text = "这是一组测试使用的文字,它非常的有用";

mPaint.setTextSize(50);
mPaint.setColor(Color.RED);
canvas.drawTextOnPath(text, path1, 0, 0, mPaint);
canvas.drawTextOnPath(text, path2, 20, 20, mPaint);

从上面的代码看出,这里下方文字的hOffset以及vOffset分别设置为20和20,可以看出hOffset是指定文字距离起始位置的偏移,而vOffset是文字在绘制方向垂直线上的偏移。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值