Android UI

SpringAnimator实现联动效果

2021-07-02  本文已影响0人  怪兽N_bd8b

使用SpringAnimation实现弹簧联动

简介

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

对应项目地址:https://gitee.com/guaishoun/spring_animation.git
<image src="https://img.haomeiwen.com/i16667339/5f60471e97fc4da4.gif?imageMogr2/auto-orient/strip" width=40%>

sping-animator.gif

添加库

def dynamicanimation_version = "1.0.0"
implementation "androidx.dynamicanimation:dynamicanimation:$dynamicanimation_version"

使用SpringForce设置弹簧效果

在基于弹簧特性的动画中,SpringForce 类允许您自定义弹簧的刚度、阻尼比以及最终位置,也可以添加一个速度。动画一开始,弹簧弹力便会更新每一帧的动画值和速度。动画会一直持续,直到弹簧弹力达到平衡状态。

更详细可以看AndroidDeveloper官网 弹簧动画

阻尼比用于描述弹簧振动逐渐衰减的状况;

常用阻尼有

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

给动画设置弹簧属性时,要知道弹簧属性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可以使界面更有质感。

上一篇下一篇

猜你喜欢

热点阅读