自定义view进阶-贝塞尔曲线实现水波动画、粘性控件

开始之前

要说自定义控件里比较逼格高的,莫属贝塞尔曲线做出的特效了,例如最常见的QQ粘性气泡,以及水波加载动画,反弹的小球,等等,看起来特别的炫酷,当然了水波动画的实现方法有好几种,这里主要记录以贝塞尔曲线的方式如何实现,开始之前,了解下基础知识,以及几个关键API:

1.快速熟悉贝塞尔

按控制点个数分为一阶贝塞尔曲线有0个控制点,二阶贝塞尔曲线有1个控制点,三阶2个控制点,四阶3个控制点,当然还有更多控制点的更多阶,不过在安卓开发中,用的3个已经是极限了,因为随着控制点增加,cpu要做的运算量呈指数增长,为了保证性能,最好将控制点使用保证在2个以下,3个不是不可以,如果是看效果还好,但是不建议在实际开发中应用,一般来说,3阶贝塞尔曲线已经够用了,足以满足绝大部分场景需求。
如果你了解PS,就很容易理解贝塞尔曲线是怎么画出的了,不了解PS也没关系,看下面几个图就明白了,比较简单:
一阶贝塞尔因为没有控制点,看起来其实就是一条直线。这里就不画图了。
二阶贝塞尔有一个控制点,在PS里用钢笔工具可以很形象的看到其结构,如图:

这里写图片描述

三阶贝塞尔曲线,2个控制点,一个在上,一个在下:
这里写图片描述

2.关键API

在自定义View中,绘制的坐标系是以屏幕左上角为原点(0,0),向右向下为正方向,如果我们想画一个2阶贝塞尔曲线,首先我们要一个画笔paint,一个路径path,然后可以画画了,
path.moveTo(startX,startY);
path.quadTo(controlX,controlY,endX,endY);
然后在ondraw()方法中就可以画出来了:
示例代码如下:

        path.moveTo(100,100);
        path.quadTo(300,20,500,100);

就这样,一个二阶贝塞尔曲线就画出来了:
这里写图片描述
三阶贝塞尔用的是:cubicTo(x1,y1,x2,y2,x3,y3);其中,x1,y1是第一个控制点,x2,y2是第二个控制点,x3,y3是终点。

         path.moveTo(100,100);
         path.cubicTo(300,20,500,180,800,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值