Android 弹性动画的三种实现方式
今日科技快讯
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。
更多
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:
- Android 8.1 曝严重 Bug,搜狗推出「唇语识别」技术,迪士尼收购
- 逐渐取代QQ?Android版《微信》内测:可一对一发文件
- 免费赠书 | 评论区留言就送《Android进阶之光》
- Android换肤笔记
- 以SEBS、SBS为基料的热塑性弹性体透明白色料的耐黄变性影响因素
- Android 应用安装包“瘦身”大作战
- 21世纪重要新材料——超分子弹性体!
- 素描高手的老师,素描画的飞起
- 怎么设置新版本的CAD画的图用低版本CAD也能正常打开?【AutoCAD
- 导弹性能太差服役即落后怎么办?印度有高招