Canvas之drawPath
来源:互联网 发布:云南省扶贫大数据平台 编辑:程序博客网 时间:2024/06/05 00:38
文章所有知识都是从这里学习的
http://www.gcssloop.com/customview/Path_Basic
path
Canvas利用Path可以绘制更复杂的图形.
path常用方法表:
去除了部分API21(即安卓版本5.0)以上才添加的方法。
Path方法使用
lineTo();
Path path = new Path(); //lineTo() 画一条直线,参数为终点的坐标,起点坐标为上一次的终点,如果第一次绘制,起点坐标为(0,0); path.lineTo(200,200); path.lineTo(200,0); canvas.drawPath(path, mPaint);
moveTo()和setLastPoint();
在绘制之前,使用moveTo和setLastPoint的效果相同
moveTo()
Path path = new Path(); //lineTo() 画一条直线,参数为终点的坐标,起点坐标为上一次的终点,如果第一次绘制,起点坐标为(0,0); path.lineTo(200,200); path.moveTo(200,100); path.lineTo(200,0); canvas.drawPath(path, mPaint);
setLastPoint();
Path path = new Path(); //lineTo() 画一条直线,参数为终点的坐标,起点坐标为上一次的终点,如果第一次绘制,起点坐标为(0,0); path.lineTo(200,200); path.setLastPoint(200,100); path.lineTo(200,0);
close();
close的作用是封闭路径,与连接当前最后一个点和第一个点并不等价。如果连接了最后一个点和第一个点仍然无法形成封闭图形,则close什么也不做
addxxx()/addTo
- 添加基本图形
path.addRect(-200,-200,200,200, Path.Direction.CW);path.addCircle(0,0,200, Path.Direction.CCW);
- 添加path
Path src = new Path(); path.addRect(-200,-200,200,200, Path.Direction.CW); src.addCircle(0,0,200, Path.Direction.CCW); path.addPath(src,0,200); //把圆形平移坐标后添加进path canvas.drawPath(path, mPaint);
addArc()和ArcTo();
arcTo();
path.lineTo(100,100); canvas.scale(1,-1); RectF oval = new RectF(0,0,300,300); path.arcTo(oval,0,270,false); canvas.drawPath(path, mPaint);
addArc();
path.lineTo(100,100); canvas.scale(1,-1); //翻转坐标系 RectF oval = new RectF(0,0,300,300); path.addArc(oval,0,270); // path.arcTo(oval,0,270,true); // <-- 和上面一句作用等价 canvas.drawPath(path, mPaint);
贝塞尔曲线.
二阶贝塞尔曲线
两个数据点,一个控制点 蓝色为辅助线. 红色为贝塞尔曲线.
//二阶贝塞尔曲线 int width = canvas.getWidth()/2; int height = canvas.getHeight()/2; mPaint.setStyle(Paint.Style.STROKE); //绘制起始点 canvas.drawPoint(width-200,height,mPaint); //绘制结束点 canvas.drawPoint(width+200,height,mPaint); //绘制辅助线 mPaint.setStrokeWidth(5); mPaint.setColor(Color.BLUE); canvas.drawLine(width-200,height,100,200,mPaint); canvas.drawLine(width+200,height,100,200,mPaint); //绘制贝塞尔曲线 mPaint.setStrokeWidth(10); mPaint.setColor(Color.RED); Path path = new Path(); path.moveTo(width-200,height); //前两个参数为控制点坐标,后两个为结束点坐标 path.quadTo(100,200,width+200,height); canvas.drawPath(path,mPaint);**
三阶贝塞尔曲线
两个数据点,二个控制点 蓝色为辅助线. 红色为贝塞尔曲线.
//二阶贝塞尔曲线 int width = canvas.getWidth()/2; int height = canvas.getHeight()/2; mPaint.setStyle(Paint.Style.STROKE); //绘制起始点 canvas.drawPoint(width-200,height,mPaint); //绘制结束点 canvas.drawPoint(width+200,height,mPaint); //绘制辅助线 mPaint.setStrokeWidth(5); mPaint.setColor(Color.BLUE); canvas.drawLine(width-200,height,100,200,mPaint); canvas.drawLine(100,200,300,200,mPaint); canvas.drawLine(300,200,width+200,height,mPaint); //绘制贝塞尔曲线 mPaint.setStrokeWidth(10); mPaint.setColor(Color.RED); Path path = new Path(); path.moveTo(width-200,height); //前四个参数为两个控制点坐标,后两个为结束点坐标 path.cubicTo(100,200,300,200,width+200,height); canvas.drawPath(path,mPaint);
布尔操作(api19及以上)
int width = canvas.getWidth(); int height = canvas.getHeight(); mPaint.setStrokeCap(Paint.Cap.ROUND); canvas.translate(0, height / 12); canvas.drawLine(100, 0, width - 100, 0, mPaint); canvas.translate(width / 2, height / 2); Path path1 = new Path(); Path path2 = new Path(); Path path3 = new Path(); Path path4 = new Path(); path1.addCircle(0, 0, 200, Path.Direction.CW); path2.addRect(0, -200, 200, 200, Path.Direction.CW); path3.addCircle(0, -100, 100, Path.Direction.CW); path4.addCircle(0, 100, 100, Path.Direction.CCW); path1.op(path2, Path.Op.DIFFERENCE); path1.op(path3, Path.Op.UNION); path1.op(path4, Path.Op.DIFFERENCE); canvas.drawPath(path1, mPaint);
0 0
- Canvas之drawPath
- canvas.drawPath 没起作用
- canvas.drawPath画特别长线
- canvas.drawPath无效,画不出来
- drawpath
- Android中Canvas中drawPath或drawTextOnPath画不出来bug总结
- Canvas.drawPath() 设置了alpha值却没有半透明效果的有关问题
- Canvas之 canvas.save()与canvas.restore()
- 绘图-drawpoint and drawpath
- drawPath 画任意多边形
- GDI+ 路径 - Create、FillPath、DrawPath
- Android drawPath的简单使用
- SWT之Canvas绘图
- Html5 之 Canvas
- HTML5研究之canvas
- android画图之canvas
- Html5系列之Canvas
- JavaFX之Canvas
- 英语沙龙第三章 英语零基础起步-全栈工程师熊盼
- XMLHttpRequest发送请求和获取响应
- 聊聊架构(2)
- 读书笔记《Effective C++》条款09:绝不在构造和析构过程中调用virtual函数
- android 串口通讯
- Canvas之drawPath
- JSF学习--JSF2组件与Tomcat9.*容器兼容的配置问题
- 反向传播算法(过程及公式推导)
- Easy-24
- react demo5 (自定义react复合组件)
- 设计模式中关系在代码中的体现
- Java字符串排序(低位优先排序,高位优先排序)
- {福利}C++初学
- Myeclipse2016如何关掉浏览器小菜单