android 属性动画——贝塞尔曲线

有段时间没写了,最近也有点忙,前段时间看见个有意思的动画,在这里自己学习一下,作为记录,原项目地址

https://github.com/saulmm/Curved-Fab-Reveal-Example

好了现在开始搞起

先看效果图


没有见过贝塞尔曲线的小伙伴肯定懵逼了,怎么实现呢,其实这个动画效果就是贝塞尔曲线实现的,不知道的可以去问下度娘。

直接看代码:


activity没什么好看的,主要内容在fragment里,按钮点击事件执行方法:


可以看出,用到了ObjectAnimator属性动画,看一下ofObject()参数


target:传入需要进行属性动画的对象;

propertyName:动画的属性名称;

TypeEvaluator:将在每个动画帧上调用,以在Object值之间提供必要的插值(第四个参数)以导出动画值。就是通过贝塞尔曲线公式算出当前进度点所在的位置。

values:动画随时间变化的一组值。就是路径集合

这时候再看“fabLoc”这个有什么用,你会发现代码里有个这样方法:

打了日志,你就会发现在动画执行时将会不断调用这个方法,这个基于ObjectAnimation的实现原理定义:定义setFabLoc函数。参数为路径信息对象,来设置动画的对象的位置。

我们再看new PathEvaluator();

这里就是通过贝塞尔曲线公式计算当前进度所在的坐标点,然后通过反射调用setFabLoc时函数的传参

继续看path.getPoints().toArray();这个就是一个添加点坐标的集合

PathPoint类包含了重置起点的路径,三阶贝塞尔移动路径,直线移动的路径;


继续设置动画属性anim.setInterpolator(newAccelerateInterpolator());是渐变加速度还是直接加速度等等,这里设置默认;

然后设置动画时长,就可以start了;

好了到这里,整个贝塞尔曲线动画已经结束,

至于变大,渐变可以看一下


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,335评论 25 709
  • 又是一年毕业季,今年终于轮到我了,最近一边忙着公司的项目,一边赶着毕设和论文,还私下和朋友搞了些小外包,然后还要抽...
    李晨玮阅读 12,039评论 5 64
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 10,185评论 2 32
  • 黑板笔墨台三尺, 前路漫漫字指引 授知识, 把蒙启。 古来今往敬作揖, 芬芳天下满桃李。
    林柳枫阅读 1,696评论 0 0
  • 第一幅图是比着第三幅图画的,女儿要公主 画人物真的好难 今天简笔画已经过半了时间,虽然要求每2天打卡一次,一个月不...
    谷月溪Amanda阅读 2,900评论 0 0