美文网首页Android UI
SpringAnimator实现联动效果

SpringAnimator实现联动效果

作者: 怪兽N_bd8b | 来源:发表于2021-07-02 09:53 被阅读0次

    使用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官网 弹簧动画

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

    • 当阻尼比大于 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实现联动效果

        本文链接:https://www.haomeiwen.com/subject/unjeultx.html