使用SpringAnimation实现弹簧联动

Posted 怪兽N

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用SpringAnimation实现弹簧联动相关的知识,希望对你有一定的参考价值。

使用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可以使界面更有质感。

以上是关于使用SpringAnimation实现弹簧联动的主要内容,如果未能解决你的问题,请参考以下文章

Lycoris Recoil再现!Unity实现Sakana~,代码思路解析,代码开源,Unity弹簧效果

几行代码实现多级ListView的多级联动效果

xmlBeanDefinitionStoreException,同时实现弹簧安全

Ajax 异步请求(登录案例实现 + ajax实现二级联动)

struts2.1 和ajax实现二级下拉框联动,使用jquery、json,代码怎么实现。

三级联动怎么回显 javaweb