一般我们要绘制任意图形的话,需要用到Path类,该类提供了各种画图形的方法,通过连接各个点来形成一个个的路径。
如下文章详细解释了如何使用其api方法,另外介绍了贝塞尔曲线的使用
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0309/2573.html
重点记录一下几个重要的步骤,比如要画一个√:
1、创建Path对象
okPath = new Path();
okPath.moveTo(20,30);//设置路径的起点
okPath.lineTo(30,50);
okPath.lineTo(60,10);
moveTo方法设置路径的起点,默认是画布的左上角。
lineTo连接点。
2、调用canvas.drawPath绘制:
canvas.drawPath(okPath, okPaint);
需要传入一个Paint
3、定义Paint
okPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
okPaint.setColor(Color.RED);
okPaint.setStyle(Paint.Style.STROKE);
okPaint.setStrokeWidth(3.0f);
这里paint的Style是镂空的,如果换成,Paint.Style.FILL,实际画出来就变成一个三角形了,所以我们需要画一些多边形的时候,就可以用这种办法来实现,定义多边形的几个点,使用path来画,然后把画笔风格设置成填充。
下面是跟踪动画的实现原理:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0907/3429.html
跟踪动画示例:
用到了几个重要的类:
1、DashPathEffect是PathEffect类的一个子类,可以使paint画出类似虚线的样子,并且可以任意指定虚实的排列方式。
PathEffect effect = new DashPathEffect(new float[] { length, length }, 0);
构造方法的第二个参数,是起始位置的偏移量,通过不断改变偏移量(使用属性动画改变这个值),生成新的effect实例,然后不断的设置给paint
paint.setPathEffect(effects);
就能形成一个动画(不过,不断地产生effect实例,会不会对性能有影响?)
2、PathMeasure 用来获取Path路径 的长度,这个路径长度可以用来设置上面的偏移量的初始值和虚、实线的值
- PathMeasure measure = new PathMeasure(path, false);
- float length = measure.getLength();
intervals = new float[]{pathLenth,pathLenth};
okPaint.setPathEffect(new DashPathEffect(intervals,pathLenth*phase));
canvas.drawPath(okPath, okPaint);