使用Path绘制图形,和绘制一条动画曲线(跟踪动画)

一般我们要绘制任意图形的话,需要用到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路径 的长度,这个路径长度可以用来设置上面的偏移量的初始值和虚、实线的值

  1. PathMeasure measure = new PathMeasure(path, false);
  2. float length = measure.getLength();
用这个length构造一个数组,
intervals = new float[]{pathLenth,pathLenth};
将该数组设置给effect,
okPaint.setPathEffect(new DashPathEffect(intervals,pathLenth*phase));
后面的pathLenth*phase就是动态的偏移值。然后再不停的invaliate,在draw方法里面调用
canvas.drawPath(okPath, okPaint);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值