Android 弹性动画的三种实现方式

580 阅读5分钟
原文链接: mp.weixin.qq.com

今日科技快讯

9月19日消息,百度宣布,余正钧加盟百度出任集团公司首席财务官(CFO),全面领导百度财务体系的构建、发展和运营。余正钧将直接向百度创始人、董事长兼首席执行官李彦宏汇报。在加入百度前,余正钧在新浪集团及微博有13年的工作经历,2007年至2014年担任新浪首席财务官,自2015年起担任微博首席财务官,在新浪集团融资、微博上市等方面做出了贡献。加入新浪前,余正钧曾在硅谷服务于 Adobe Systems 等公司。余正钧拥有加州 CPA,美国南加州大学财会专业硕士学位及加州大学经济学学士学位。

作者简介

本篇来自 qq_34902522 的投稿,详细地讲解了弹性动画的多种实现方式,希望大家喜欢!

qq_34902522  的博客地址:

http://blog.csdn.net/qq_34902522

前言

现在的 android 开发提出的需求是越来越接近现实真实感,提高用户体验感。就拿动画效果来说,之前设计给的需求大都比较直接,缩放、旋转、移动等动画效果都执行完就结束了。现在的话,为了追求现实 生活中的那种真实感,往往都会有一个回弹的效果,称之为弹性动画。

非弹性动画体验

非弹性动画的效果图:

我们来看一下实现该效果的代码:

通过效果图,我们会觉得不 real,我们想让他 Q 一点,有弹性效果  

那该怎么实现呢?往下看。

弹性动画的三种实现方式

way 1:

通过 interpolator(差值器)实现弹性效果。

这里给大家一个关于差值器网站:

http://inloop.github.io/interpolator/

在这个网站上可以在线看每种 interpolator 的效果,从而选择所需要的 interpolator。这里我们选择 scaling,library 选择 spring。如下图:

然后重写 interpolator 类,代码如下:

接下来就是把我们重写的差值器设置进去,看代码:

这里重写的 interpolator 的构造方法中我穿的参数是因子,它的值越大,它回弹效果越慢。让我们来看看效果吧:

确实达到了我们要的弹性效果,如果觉得弹性不够的话,可以修改弹性因数即可。这里我用的是属性动画,用补间动画设置自己重写的 interpolator 也是同样可以的。 

way 2:

第二种实现弹性动画的方式是使用 Facebook 推出的 rebound

如何使用的呢?首先我们要在 build.gradle 中引入如下依赖:  

compile 'com.facebook.rebound:rebound:0.3.8'  

然后我们先上代码,根据代码来讲解使用:

使用 rebound 我们需要初始化 SpringSystem 对象和 Spring 对象。通过 Spring 我们可以设置动画属性的初始值、结束值。 Spring 需要添加一个 SpringListener 接口,代码中我用的 SimpleSpringListener 是 Springlistener 的实现类。(ps:addListener 这里如果 new 一个 SpringListener 的话要重写全部的方法,没必要,需要哪个写哪个)。我们看下 SpringListener 接口的定义

我们需要什么样的需求就重写对应方法就好。上面的代码中有 SpringConfig 这个对象,通过看源码发现他的构造函数接受两个变量:1.tension(拉力)、2.friction(摩擦力)。作用是什么呢?很好理解 tension 拉力越大,弹性越大,friction 摩擦力越大,弹性效果越小。默认的 tension 值,friction 值如下:

下面让我们看下通过 rebound 实现的弹性效果是什么样的:

弹性效果可以通过修改 tension 和 friction 的值来改变,大家可以试试。

way 3:

下面我们说一说最后一种实现方式。通过引入官方提供的 SpringAnimation 来实现。上面第二种方式我们是用的 Facebook 推出的框架,现在我们看看 Google 官方的效果吧。

首先我们在 build.gradle 文件中引入依赖:  

compile 'com.android.support:support-dynamic-animation:25.3.1'

接下来上代码:

这里面具体的一些用法,我就不细说了,可以参考:

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0330/7757.html

这个链接里面说的还挺详细的。那我们看下通过 SpringAnimation 实现的效果是怎么样的。

同 rebound,这边如果你对弹性动画的弹性效果不满意可以通过 setStiffness() 和 setDampingRatio() 方法来实现你想要的效果。注意哦,stiffness 的值越小,弹性效果越好,弹时间越长。DampingRatio 的值越大,弹性效果越差。  

区别

这三种方式都可以实现弹性效果,那到底选择什么方式呢,这里说一下 rebound 和 SpringAnimation 。SpringAnimation 的话在对一个控件多个属性的动画效果设置比如一个 view 我既设置缩放动画又设置 平移动画。就会会出现代码量多的问题,而 rebound 则相对好些。

下面附上一张完整的效果图:

好了,到这里弹性动画主要的实现点都讲完了。想了解完整流程的可阅阅读源码:

http://blog.csdn.net/qq_34902522/article/details/77651799

谢谢阅读,欢迎 star。

更多

每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。

如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击 “投稿”菜单查看。

欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: