万书网 > 文学作品 > Android从入门到精通 > 第98页

第98页



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)  用于在指定点绘制位图