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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值