SpringAnimator弹簧联动效果的实现
使用SpringAnimation实现弹簧联动
简介
弹簧效果动画SpringAnimation与甩动效果动画FlingAnimation使用上很类似,主要区别在于FlingAnimation是根据甩动动作fling提供的速度和摩擦力来控制动画,而SpringAnimation是根据弹簧的刚度、阻尼、目标终点三个因素来实现弹簧动画效果。所以对于弹簧动画,设置刚度Stiffness、阻尼DampingRatio、目标终点FinalPosition这三个参数就可以实现弹簧动画了,还有就是非必要因素速度Velocity。由于SpringAnimation的一些基本使用与FlingAnimation很相似,所以基本使用请参考《FlingAnimation的使用》这篇文章,本文只对重要的地方说明。先看效果如下。
对应项目地址:https://gitee.com/guaishoun/spring_animation.git

添加库
def dynamicanimation_version = "1.0.0"
implementation "androidx.dynamicanimation:dynamicanimation:$dynamicanimation_version"
使用SpringForce设置弹簧效果
在基于弹簧特性的动画中,SpringForce 类允许您自定义弹簧的刚度、阻尼比以及最终位置,也可以添加一个速度。动画一开始,弹簧弹力便会更新每一帧的动画值和速度。动画会一直持续,直到弹簧弹力达到平衡状态。
更详细可以看AndroidDeveloper官网 弹簧动画。
阻尼比用于描述弹簧振动逐渐衰减的状况;
当阻尼比大于 1 时,会出现过阻尼现象。它会使对象快速地返回到静止位置。
当阻尼比等于 1 时,会出现临界阻尼现象。这会使对象在最短时间内返回到静止位置。
当阻尼比小于 1 时,会出现欠阻尼现象。这会使对象多次经过并越过静止位置,然后逐渐到达静止位置。
当阻尼比等于零时,便会出现无阻尼现象。这会使对象永远振动下去。
常用阻尼有
DAMPING_RATIO_HIGH_BOUNCYDAMPING_RATIO_MEDIUM_BOUNCYDAMPING_RATIO_LOW_BOUNCYDAMPING_RATIO_NO_BOUNCY
刚度定义了用于衡量弹簧强度的弹簧常量。常用刚度有
STIFFNESS_HIGHSTIFFNESS_MEDIUMSTIFFNESS_LOWSTIFFNESS_VERY_LOW
给动画设置弹簧属性时,要知道弹簧属性SpringForce是弹簧动画SpringAnimation的一个属性,所以可以new 也可以使用默认的get
final View img = findViewById(R.id.imageView);
final SpringAnimation anim = new SpringAnimation(img, DynamicAnimation.TRANSLATION_Y);
//new and set
SpringForce force = new SpringForce();
force.setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY);
force.setStiffness(SpringForce.STIFFNESS_LOW);
anim.setSpring(force);
//或者getDefault and set
…
//Setting the damping ratio to create a low bouncing effect.
anim.getSpring().setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY);
//Setting the spring with a low stiffness.
anim.getSpring().setStiffness(SpringForce.STIFFNESS_LOW);
最终位置虽然也属于SpringForce的一个属性,但是使用SpringAnimation来设置即可
new SpringForce(finalPosition)
//构造函数
public <K> SpringAnimation(K object, FloatPropertyCompat<K> property,
float finalPosition)
springAnimation.animateToFinalPosition(float finalPosition)
速度设置速度是为了添加在甩动后给弹簧动画添加初始速度,使动画更符合实际惯性运动效果。
springAnimation.setStartVelocity(velocityX);
总结
SpringAnimation的使用要紧扣阻尼比、刚度、最终位置,这三点即可,而速度可有可无。与FlingAnimation的使用没有多大区别。但是SpringAnimation可以使界面更有质感。
SpringAnimator弹簧联动效果的实现的更多相关文章
- Json 基于jQuery+JSON的省市联动效果
helloweba.com 作者:月光光 时间:2012-09-12 21:57 标签: jQuery JSON Ajax 省市联动 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些 ...
- 一行代码实现headView弹簧拉伸效果
前言 很多app的个人中心上部的headView都实现了弹簧拉伸的效果,即tableView的top并不随着下拉而滑动,而是紧紧的停在屏幕的最上方. 我们今天就分析一下这个效果的实现方式. 分析 关键 ...
- JQuery打造下拉框联动效果
做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面.考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后 ...
- ASPxComboBox控件联动效果bug改进
原文:ASPxComboBox控件联动效果bug改进 在应用第三方控件DevExpress控件的时候,大家应该对ASPxComboBox控件应该不是很陌生吧,尤其在做多级联动效果的时候,有着它独特的地 ...
- jquery.cityselect.js基于jQuery+JSON的省市或自定义联动效果
一.插件介绍 最早做省市联动的时候都特别麻烦,后来在helloweba的一篇文章中看到这个插件,很不错的,后来就一直用了. 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最 ...
- 用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果
echarts对于大数据处理后绘制折线图,柱形图等等的效果和速度都很好.下面我们介绍 怎么把封装的数据列表解析出来,动态绘图,并且实现鼠标联动效果引入js文件: <script type=&qu ...
- PyQt5--基础篇:用eric6工具实现三级联动效果
今天给大家介绍下python gui界面的三级联动效果,我们用工具eric6来实现,先看下效果图. 首先我们先创建项目linkage,再新建窗体进入到Qt设计师工具开始设计界面,完成后保存并退出. 在 ...
- 实现select联动效果,数据从后台获取
效果如下: 当type值选择完后,amount值会自动相应填入. 1. 从后台获取数据,为一个数组,里面包含多个对象. <select id="scholarshipTypeSelec ...
- vue实现二级联动效果
你如城市与省份间的二级联动效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...
随机推荐
- mysql基本命令(增,查,改,删)
from oldboy egon
- EventSource的自定义实现
前言: 前面两篇文章都介绍了.NET Core 性能诊断工具,其中诊断工具都用到了EventCounters来实时的收集服务器性能指标. 那么收集指标能否自己定义呢? 一.What's EventCo ...
- jQuery清空元素和克隆元素
1.清空 $(function () { $('#btn').click(function () { $('#ul1').html('') $('#ul1').empty() $('#ul1').re ...
- [Python] 地图API
请求位置信息 https://restapi.amap.com/v3/place/text?keywords=北京大学&city=beijing&output=xml&offs ...
- im-chooser重新选择输入法框架在终端执行im-chooser命令
CentOS 7安装图像桌面.Ibus拼音输入法一.图形桌面安装1.安装额外包yum源(extra package for Enterprise Linux) yum install epel-rel ...
- 如果你想设置无人自动升级,我们推荐你将这个值修改为security,它会告诉 yum 仅仅升级修复安全问题的软件包。
定期升级你的 CentOS 系统,是所有系统安全中最重要的措施之一.如果你不使用最新的安全补丁升级你的操作系统软件包,你将会让你的机器很容易被攻击. 如果你管理者多个 CentOS 机器,手动升级系统 ...
- Linux中级之lvs三个模式的图像补充(nat,dr,tun)
负载均衡(Load Balance)集群提供了一种廉价.有效.透明的方法,来扩展网络设备和服务器的负载.带宽.增加吞吐量.加强网络数据处理能力.提高网络的灵活性和可用性. (1)单台计算机无法承受大规 ...
- 8.4 parted:磁盘分区工具
parted 对于小于2TB的磁盘可以用fdisk和parted命令进行分区,这种情况一般采用flisk命令,但对于大于2TB的磁盘则只能用parted分区,且需要将磁盘转换为GPT格式. p ...
- springboot项目部署docker服务器提供api
1.先将springboot项目打包,我这里用的是IDEA工具打包,打包完成后的jar包在 项目目录/target 中 2.打包完成后进入服务器器终端,将jar包上传到自己设置的目录中,这个目录需要跟 ...
- Windows 10 版本 21H1 发布,百度网盘下载
请访问原文链接:https://sysin.org/article/windows-10/,查看最新版.原创作品,转载请保留出处. Windows 10, version 21H1, all edit ...