quadTo(float x1, float y1, float x2, float y2) 用于根据指定的参数绘制一条线段轨迹
close() 闭合路径
说明: 在使用addCircle()、addOval()、addRect()和addRoundRect()方法时,需要指定Path.Direction类型的常量,可选值为Path.Direction.CW(顺时针)和Path.Direction.CCW(逆时针)。
例如,要创建一个顺时针旋转的圆形路径,可以使用下面的代码:
Path path=new Path(); //创建并实例化一个path对象
path.addCircle(150, 200, 60, Path.Direction.CW); //在path对象中添加一个圆形路径
要创建一个折线,可以使用下面的代码:
Path mypath=new Path(); //创建并实例化一个mypath对象
mypath.moveTo(50, 100); //设置起始点
mypath.lineTo(100, 45); //设置第1段直线的结束点
mypath.lineTo(150, 100); //设置第2段直线的结束点
mypath.lineTo(200, 80); //设置第3段直线的结束点
将该路径绘制到画布上的效果如图9.6所示。
图9.6 绘制3条线组成的折线
要创建一个三角形路径,可以使用下面的代码:
Path path=new Path(); //创建并实例化一个path对象
path.moveTo(50,50); //设置起始点
path.lineTo(100, 10); //设置第1条边的结束点,也是第2条边的起始点
path.lineTo(150, 50); //设置第2条边的结束点,也是第3条边的起始点
path.close(); //闭合路径
将该路径绘制到画布上的效果如图9.7所示。
图9.7 绘制一个三角形
说明: 在创建三角形路径时,如果不使用close()方法闭合路径,那么绘制的将是两条线组成的折线,如图9.8所示。
图9.8 绘制两条线组成的折线
2. 将定义好的路径绘制在画布上
使用Canvas类提供的drawPath()方法,可以将定义好的路径绘制在画布上。
说明: 在Android的Canvas类中,还提供了另一个应用路径的方法drawTextOnPath(),也就是沿着指定的路径绘制字符串。使用该方法可绘制环形文字。
例9.5 在Eclipse中创建Android项目,名称为9.5,实现在屏幕上绘制圆形路径、折线路径、三角形路径以及绕路径的环形文字。(实例位置:光盘\TM\sl\9\9.5)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。
(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,然后在onCreate()方法中,获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。
(3)在MyView的onDraw()方法中,首先创建一个画笔,并设置画笔的相关属性,然后创建并绘制一个圆形路径、折线路径和三角形路径,最后再绘制绕路径的环形文字。具体代码如下:
Paint paint=new Paint(); //创建一个画笔
paint.setAntiAlias(true); //设置使用抗锯齿功能
paint.setColor(0xFFFF6600); //设置画笔颜色
paint.setTextSize(18); //设置文字大小
paint.setStyle(Style.STROKE); //设置填充方式为描边
//绘制圆形路径
Path pathCircle=new Path(); //创建并实例化一个path对象
pathCircle.addCircle(70, 70, 40, Path.Direction.CCW); //添加逆时针的圆形路径
canvas.drawPath(pathCircle, paint); //绘制路径
//绘制折线路径
Path pathLine=new Path(); //创建并实例化一个Path对象
pathLine.moveTo(150, 100); //设置起始点
pathLine.lineTo(200, 45); //设置第1段直线的结束点
pathLine.lineTo(250, 100); //设置第2段直线的结束点
pathLine.lineTo(300, 80); //设置第3段直线的结束点
canvas.drawPath(pathLine, paint); //绘制路径
//绘制三角形路径
Path pathTr=new Path(); //创建并实例化一个path对象
pathTr.moveTo(350,80); //设置起始点
pathTr.lineTo(400, 30); //设置第1条边的结束点,也是第2条边的起始点
pathTr.lineTo(450, 80); //设置第2条边的结束点,也是第3条边的起始点
pathTr.close(); //闭合路径
canvas.drawPath(pathTr, paint); //绘制路径
//绘制绕路径的环形文字
String str="风萧萧兮易水寒,壮士一去兮不复还";
Path path=new Path(); //创建并实例化一个path对象
path.addCircle(550, 100, 48, Path.Direction.CW); //添加顺时针的圆形路径
paint.setStyle(Style.FILL); //设置画笔的填充方式
canvas.drawTextOnPath(str, path,0, -18, paint); //绘制绕路径文字
运行本实例,将显示如图9.9所示的运行结果。
图9.9 绘制路径及绕路径文字
9.2.4 绘制图片
在Android中,Canvas类不仅可以绘制几何图形、文件和路径,还可用来绘制图片。要想使用Canvas类绘制图片,只需要使用Canvas类提供的如表9.6所示的方法将Bitmap对象中保存的图片绘制到画布上即可。
表9.6 Canvas类提供的绘制图片的常用方法
方 法 描 述
drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint) 用于从指定点绘制从源位图中“挖取”的一块
drawBitmap(Bitmap bitmap, float left, float top, Paint paint) 用于在指定点绘制位图