Android 关于路径Path的那些效果

主要内容:
1.path线段动画绘制出现(画图,画svg文字等)
2.path路径动画(对象沿着指定的路径进行运动)
3.获取path内的所有点(判断是否触摸在指定区域内)

一、path线段的动画绘制(也可以将SVG格式的文字转换为path之后实现写字效果)


先看网上盗的动态图(注意看里面的线段出现方式,感觉就像拿着笔依次绘制出来的感觉)
gif图太大传不上来,看 https://github.com/romainguy/road-trip里面的图就行

核心为使用 DashPathEffect绘制虚线

实现方式(举一个简单例子):
1.先使用Path绘制一个200*200矩形
Path path = new Path();
path.moveTo(0,0);
path.lineTo(200,0);
path.lineTo(200,200);
path.lineTo(0,200);
path.lineTo(0,0);

2.使用PathMeasure计算出整个Path的长度
PathMeasure pm = new PathMeasure();
float totalLen = pm.getLength();
3.开启一个线程动态增加已绘制出来的部分长度
timer = new Timer();
task = new TimerTask() {
@Override
public void run() {
percent += 0.04;
if (percent > 1) {
percent = 1;
}
handler.sendEmptyMessage(0);
}
};
timer.schedule(task, 0, 100);
float dis = totalLen * percent;
以上只是模拟的一种实现方式,大家也可以用其他方式实现(这部分主要是动画)
handler里面主要是调用了View的invalidate进行重绘

4.使用DashPathEffect绘制路径
PathEffect pe = new DashPathEffect(new float[]{d, len - d}, 0);
paint.setPathEffect(pe);
public DashPathEffect( float intervals[] , float phase);
inervals[] 中第一个值为显示长度,第二个值是间隔长度,第三个值为显示长度,第四个值是间隔长度,以此类推
phase据说是偏移量

这里的原理主要是将整个Path分成两部分,第一部分将需要绘制出来的部分作为显示长度,第二部分将还没有画出来的部分作为间隔长度,从而达到实现效果
canvas.drawPath(path,paint);


二、path路径动画



核心代码为:
float[] curPos = new float[2];
pm.getPosTan(dis,curPos,null);
dis参照以下 path线段的动画绘制 的第3点,主要是距离path起始点的距离

通过PathMeasure计算出路径Path上指定位置的点坐标
curPos[0] 为x坐标
curPos[1] 为y坐标

拿到这个点了,当然是想干什么干什么

三、获取path内的所有点,判断指定点是否在path内部


1.获取path的边界(即包含它的最小矩形)
RectF rf = new RectF();
path.computeBounds(rf,true);
2.得到Path内所有点的集合
Region region = new Region();
region.setPath(path,new Region((int)rf.left,(int)rf.top,(int)rf.right,(int)rf.bottom));
3.判断x,y是否在Path内
region.contains(x,y)

注意:以上方法有些边界部分包含不进去,因为RectF据说是一个左闭右开的集合

如果想要包含边界值:
for(int i = 0; i <= pm.getLength(); i ++){
float[] pos = new float[2];
pm.getPosTan(i,pos,null);
//添加到集合中去
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值