最近看了一些关于android path的使用,这里做个总结,方便以后查阅

 

Path主要用于绘制复杂的图形轮廓,比如折线,圆弧以及各种复杂图案

方法列表:

 

  • reset()                           
  • lineTo(float x, float y)
  • moveTo(float x, float y)
  • close()
  • path.addArc(oval, startAngle, sweepAngle)
  • arcTo(RectF oval, float startAngle, float sweepAngle)
  • quadTo(float x1, float y1, float x2, float y2)
  • addCircle(float x, float y, float radius, Direction dir)
  • addOval(RectF oval, Path.Direction dir)
  • addPath(Path src, float dx, float dy)

 

Paint初始化操作:

在处理path之前,我们首先对paint做一些初始化操作:

Paint paint = new Paint(); paint.setColor(Color.RED); //设置画笔宽度 paint.setStrokeWidth(3);//消除锯齿 paint.setAntiAlias(true); //设置镂空(方便查看效果)paint.setStyle(Style.STROKE);

 

path中从最基本的moveTo(float x, float y),lineTo(float x, float y),reset()及close()方法入手

 

reset()方法:

reset()清除path设置的所有属性

 

lineTo(float x, float y)方法:

lineTo(float x, float y)方法用于从当前轮廓点绘制一条线段到x,y点:

 

从原点开始绘制一条折线,代码如下:

Path path = new Path(); path.lineTo(100,100); path.lineTo(100, 200); path.lineTo(150, 250); canvas.drawPath(path, paint);

 
 

上图中没有指定初始轮廓点,默认从0,0点开始

 

moveTo(float x, float y)方法:

path的moveTo方法将起始轮廓点移至x,y坐标点,默认情况为0,0点

 

使用moveTo设置轮廓点:代码如下:

Path path = new Path();path.moveTo(20, 200); path.lineTo(50, 200); path.lineTo(100, 300); path.lineTo(200, 350);canvas.drawPath(path, paint);

效果图如下:

 上图使用moveTo改变path绘制起始顶点效果

 

close()方法:

回到初始点形成封闭的曲线:

Path path = new Path();path.moveTo(20, 200); path.lineTo(50, 200); path.lineTo(100, 300); path.lineTo(200, 350); path.close(); canvas.drawPath(path, paint);

效果图如下:

 

 

 

addArc(RectF oval, float startAngle, float sweepAngle)方法:

path.addArc方法用于绘制圆弧,这个圆弧取自RectF矩形的内接椭圆上的一部分,圆弧长度由后两个参数决定

startAngle:起始位置的角度值

sweepAngle:旋转的角度值

如图所示:其中矩形和两条直线是用来做对比

Rect rect = new Rect(100, 100, 300, 250); canvas.drawRect(rect, paint); canvas.drawOval(new RectF(rect), paint); canvas.drawLine(50, 175, 350, 175, paint); canvas.drawLine(200, 50, 200, 300, paint); path.reset();path.addArc(new RectF(rect), 30, 60);canvas.drawPath(path, paint);

下图中标注了圆弧的0度起点和弧度增量方向为顺时针,那么当我们截取其中的0-90的长度圆弧对应的是右下角的四分之一圆弧长度:

 

 

 

 

 

arcTo(RectF oval, float startAngle, float sweepAngle)方法:

arcTo和addArc的区别:

1. addArc可以直接加入一段椭圆弧。使用arcTo还需要使用moveTo指定当前点的坐标。

2. arcTo如果当前点坐标和曲线的起始点不是同一个点的话,还会自动添加一条直线补齐路径。

 

Rect rect = new Rect(100, 100, 300, 250); canvas.drawRect(rect, paint); canvas.drawLine(50, 175, 350, 175, paint);canvas.drawLine(200, 50, 200, 300, paint); Path path = new Path(); path.moveTo(0, 0); path.arcTo(new RectF(rect), 0, 90); //path.addArc(new RectF(rect), 0, 90); canvas.drawPath(path, paint);

 

效果图:

 

quadTo(float x1, float y1, float x2, float y2)方法:

以当前路径结束点为开始点,(x1,y1)为控制点,(x2,y2)为结束点画一条二次贝塞尔曲线(相关贝赛尔曲线请再做查询)

Path path = new Path();path.moveTo(20, 50); path.lineTo(50, 200); path.quadTo(100, 200, 150, 250); canvas.drawPath(path, paint);

 

 

 

 

addCircle(float x, float y, float radius, Direction dir)方法:

使用path绘制圆形,xy为圆的圆心 radius为圆的半径,Direction 为绘制元的方向

Diection.CCW 逆时针方向

Diection.CW 顺时针方向

 

Path path = new Path();path.reset(); path.addCircle(100, 100, 50, Direction.CW); canvas.drawPath(path, paint);

 

addOval(RectF oval, Path.Direction dir)方法:

绘制椭圆,同上绘制圆的方法

 

addPath(Path src, float dx, float dy)方法:

在已有的Path上通过平移创建新的path:

Path path = new Path(); path.lineTo(100,100); path.lineTo(100, 200); path.lineTo(150, 250); canvas.drawPath(path, paint); path.addPath(path, 100, 0); canvas.drawPath(path, paint);

 

 

 

更多相关文章

  1. [qt for android]构建项目时,出现“过程试图写入的管道不存在”错
  2. Android开发工具类之DownloadManagerPro
  3. Android完全退出App的一些问题
  4. Android(安卓)LayoutInflater深度解析 给你带来全新的认识
  5. 《Android第一行代码》coolweather项目个人总结
  6. ActivityManagerService启动学习
  7. Android(安卓)Training - 网络操作(1) - 连接网络
  8. MAC OSX上SDK Manager无法下载Android(安卓)SDK5.0的解决方法
  9. android不公开的面试题偶!!!

随机推荐

  1. android注解初始化view
  2. 《Android/OPhone 开发完全讲义》已出版,
  3. Android(安卓)Launcher 分析
  4. Android中的Spinner的用法详解
  5. 解决TextView中MaxLines与ellipsize=end
  6. Android(安卓)UI自定义Spinner下拉框(用po
  7. Android禁止横屏竖屏切换
  8. 通过JavaScript或PHP检测Android设备的代
  9. Android禁止横屏竖屏切换
  10. Android(安卓)application context/activ