FlingAnimation/SpringAnimation实现弹球动画

You have to believe in yourself. That’s the secret of success.

之前的QQ版本里面有个大表情的动画很炫酷,之前就想着怎么实现的。最近看了DynamicAnimation,发现利用它很容易实现类似效果,自己最近也在看Kotlin,因此就用Kotlin写个demo练练手。

实现效果

等我实现了效果,发现QQ已经把该功能去掉了T_T。原版的效果看不到了,直接放我实现的效果。
在这里插入图片描述

实现原理

窗口的左右抖动效果

借助SpringAnimation 可以实现,顾名思义该动画库能实现弹簧般的抖动效果。与弹簧相关的两个重要物理属性分别是Damping ratio(阻尼比)和Stiffness(刚性)。

  • Damping ratio(阻尼比)
    阻尼比描述了弹簧振荡过程中逐渐减小的速度。 通过阻尼比,可以调整振荡从一次反弹到下一次反弹的衰减速度。
    官方用法示例:
findViewById<View>(R.id.imageView).also {
    img ->
    SpringAnimation(img, DynamicAnimation.TRANSLATION_Y).apply {
   //Setting the damping ratio to create a low bouncing effect.
        spring.dampingRatio = SpringForce.DAMPING_RATIO_LOW_BOUNCY
        …
    }
}

动画库已经提供了四种类型的阻尼比,官方也提供了相对应的效果图
DAMPING_RATIO_HIGH_BOUNCY
在这里插入图片描述
DAMPING_RATIO_MEDIUM_BOUNCY
在这里插入图片描述
DAMPING_RATIO_LOW_BOUNCY
在这里插入图片描述
DAMPING_RATIO_NO_BOUNCY
在这里插入图片描述

  • Stiffness(刚性)
    刚性指弹簧产生形变时,产生的弹力大小。相应的系统也提供了四种值。
    STIFFNESS_HIGH
    STIFFNESS_MEDIUM
    STIFFNESS_LOW
    STIFFNESS_VERY_LOW
    Stiffness的值越大,弹簧动画看起来的抖动也就越不明显,就像我们施加相同的力给粗细不同的铁丝弹簧,施加的力取消后,越粗的弹簧刚性越大,它的抖动就没有细的弹簧明显。
    官方用法示例:
findViewById<View>(R.id.imageView).also {
    img ->
    SpringAnimation(img, DynamicAnimation.TRANSLATION_Y).apply {
   //Setting the spring with a low stiffness.
        spring.stiffness = SpringForce.STIFFNESS_LOW
        …
    }
}
  • SpringForce自定义弹簧动画属性
    如果想将Damping ratio/Stiffness 应用在多个弹簧动画中,可以通过SpringForce 来设置。
SpringForce force = new SpringForce();
force.setDampingRatio(DAMPING_RATIO_LOW_BOUNCY).setStiffness(STIFFNESS_LOW);
setSpring(force);

有了上面的知识,可以很容易的实现窗口左右抖动的效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值