使用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_BOUNCY

  • DAMPING_RATIO_MEDIUM_BOUNCY

  • DAMPING_RATIO_LOW_BOUNCY

  • DAMPING_RATIO_NO_BOUNCY

刚度定义了用于衡量弹簧强度的弹簧常量。常用刚度有

  • STIFFNESS_HIGH

  • STIFFNESS_MEDIUM

  • STIFFNESS_LOW

  • STIFFNESS_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弹簧联动效果的实现的更多相关文章

  1. Json 基于jQuery+JSON的省市联动效果

    helloweba.com 作者:月光光 时间:2012-09-12 21:57 标签: jQuery  JSON  Ajax  省市联动     省市区联动下拉效果在WEB中应用非常广泛,尤其在一些 ...

  2. 一行代码实现headView弹簧拉伸效果

    前言 很多app的个人中心上部的headView都实现了弹簧拉伸的效果,即tableView的top并不随着下拉而滑动,而是紧紧的停在屏幕的最上方. 我们今天就分析一下这个效果的实现方式. 分析 关键 ...

  3. JQuery打造下拉框联动效果

    做联动效果,若是用纯JavaScript来做,往往须要辅助页面保存须要刷新的结果集,然后渲染到原页面.考虑将须要动态刷新的内容自己主动拼接到前一个下拉框之后,当前一个下拉框onchange后,同级的后 ...

  4. ASPxComboBox控件联动效果bug改进

    原文:ASPxComboBox控件联动效果bug改进 在应用第三方控件DevExpress控件的时候,大家应该对ASPxComboBox控件应该不是很陌生吧,尤其在做多级联动效果的时候,有着它独特的地 ...

  5. jquery.cityselect.js基于jQuery+JSON的省市或自定义联动效果

    一.插件介绍 最早做省市联动的时候都特别麻烦,后来在helloweba的一篇文章中看到这个插件,很不错的,后来就一直用了. 省市区联动下拉效果在WEB中应用非常广泛,尤其在一些会员信息系统.电商网站最 ...

  6. 用echartsjs 实现动态绘制折线、柱状等图形,并实现多图联动效果

    echarts对于大数据处理后绘制折线图,柱形图等等的效果和速度都很好.下面我们介绍 怎么把封装的数据列表解析出来,动态绘图,并且实现鼠标联动效果引入js文件: <script type=&qu ...

  7. PyQt5--基础篇:用eric6工具实现三级联动效果

    今天给大家介绍下python gui界面的三级联动效果,我们用工具eric6来实现,先看下效果图. 首先我们先创建项目linkage,再新建窗体进入到Qt设计师工具开始设计界面,完成后保存并退出. 在 ...

  8. 实现select联动效果,数据从后台获取

    效果如下: 当type值选择完后,amount值会自动相应填入. 1. 从后台获取数据,为一个数组,里面包含多个对象. <select id="scholarshipTypeSelec ...

  9. vue实现二级联动效果

    你如城市与省份间的二级联动效果 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"&g ...

随机推荐

  1. [刷题] PTA 6-10 阶乘计算升级版

    要求: 实现一个打印非负整数阶乘的函数 N是用户传入的参数,其值不超过1000.如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印"Invalid input" 1 # ...

  2. Linux 系统定时任务:crontab,anacron

    Linux 系统定时任务:crontab,anacron 一.Cron 服务 1. 启动服务 service cron start 2. 关闭服务 service cron stop 3. 重启服务 ...

  3. x轴滚动

    #region 设置x轴滚动      XYDiagram diagram = (XYDiagram)chartRoomUserAnalysisHis.Diagram;      diagram.Ax ...

  4. CSS定位特性

    CSS属性书写顺序 布局定位属性:display / position / float / clear / visibility / overflow 自身属性:width / height / ma ...

  5. java并发编程工具类JUC第一篇:BlockingQueue阻塞队列

    Java BlockingQueue接口java.util.concurrent.BlockingQueue表示一个可以存取元素,并且线程安全的队列.换句话说,当多线程同时从 JavaBlocking ...

  6. Hadoop 基石HDFS 一文了解文件存储系统

    @ 目录 前言:浅谈Hadoop Hadoop的发展历程 1.1 Hadoop产生背景 1.引入HDFS设计 1.1 HDFS主要特性 2.HDFS体系结构 HDFS工作流程机制 1.各个节点是如何互 ...

  7. Tensorflow 2.0 搭建神经网络(局部)

    前向传播 tensorflow.keras 搭建网络时,内部的网络可以直接完成所有层的前向计算.全连接Dense() 层,最后一层的神经元的个数需要和最后一层线性函数 w x + b 的维度对应上,中 ...

  8. Asp.Net Core Api 使用Swagger管理文档教程的安装与使用

    这周因为公司的需求需要我做一个Api的程序,这周的三天时间我一直在Core Api和 framework Api之间做纠结.不知道要使用哪一个去做项目,想着想着就决定了.既然两个我都没用过那个何不来使 ...

  9. Auto ML自动调参

    Auto ML自动调参 本文介绍Auto ML自动调参的算法介绍及操作流程. 操作步骤 登录PAI控制台. 单击左侧导航栏的实验并选择某个实验. 本文以雾霾天气预测实验为例. 在实验画布区,单击左上角 ...

  10. nvGRAPH API参考分析(二)

    nvGRAPH API参考分析(二) nvGRAPH Code Examples 本文提供了简单的示例. 1. nvGRAPH convert topology example void check( ...