• interpolater插值器与属性动画的使用


    属性动画:连同控件本身一起动画:

    所有的属性动画都是继承于Animator的,Animator下分为ValueAnimator与ViewPropertyAnimator

    其中ValueAnimator下又分为ObjectAnimator)(改变一个属性,如只改便拉伸x,拉伸y,)与AnimatorSet(将多个改变结合在一起,如将拉伸x与拉伸y结合在一起,一起做动画)

    Animator :

          (1):ValueAnimator

                        ObjectAnimator,AnimatorSet

           (2):ViewPropertyAnimator

    一:ObjectAnimator的使用

    //image是我视图的id值,表对id值为image的视图做改变

    //alpha值是对该图片的哪个属性做改变:拉伸x:scaleX,拉伸y:scaleY,移动x:translationX,移动y:translationY,

                                                                      绕z轴旋转:rotation,绕x轴旋转:rotationX,绕y轴旋转:rotationY

    //alpha后面的数,若是只有一个值,那么就从当前的状态变到值的状态,如若只有0f,这alpha从1(本身的状态为1)变到0,

                                 若是有多个值,则从前面的值变到后面的值的状态,如这的alpha状态的改变就是从0变到1的

    ObjectAnimator.ofFloat(image,"alpha",0f,1f).apply {
    duration = 2000
    repeatCount = 0
    添加动画的监听事件
    addListener(object :Animator.AnimatorListener{
    override fun onAnimationStart(animation: Animator?) {
    //动画开始时
    Log.v("lfl","动画开始了")
    }

    override fun onAnimationEnd(animation: Animator?) {
    //动画结束时
    Log.v("lfl","动画结束了")
    }

    override fun onAnimationCancel(animation: Animator?) {
    //动画取消时
    Log.v("lfl","动画取消了")
    }

    override fun onAnimationRepeat(animation: Animator?) {
    //动画重复时调用
    Log.v("lfl","动画在一次被重复了")
    }

    })
    addUpdateListener {
    //it(ValueAnimator)是从0到1之间的变化的值,上面ofFloat中values的值是从0到1
    Log.v("lfl","数据的变化为$it")
    }
    addPauseListener {
    //当中止动画或者重启动画时调用
    }
    //启动动画
    start()

    二:AnimationSet的使用:

      

    val v1 =  ObjectAnimator.ofFloat(image,"scaleX",1f,2f)
    val v2 = ObjectAnimator.ofFloat(image,"scaleY",1f,2f)
    AnimatorSet().apply {
    //先后顺序的动画,这个就是先动画v1,在动画v2
    // playSequentially(v1,v2)
    //一起动画
    playTogether(v1,v2)
    start()
    }


    三:ViewPropertyAnimation的使用:
    //通过animate()直接访问赋值,但是只能赋一个值,
    同时可以赋多个属性的值
    image.animate().alpha(0f)
    .rotation(360f)
    .translationX(2f)
    .setDuration(2000)
    .start()

    两个动画时可用PropertyValuedHolder
    //手臂左边移动
    val tx = PropertyValuesHolder.ofFloat("translationX",0f)
    //手臂上边移动
    val ty = PropertyValuesHolder.ofFloat("translationY",0f)
    val translate = ObjectAnimator.ofPropertyValuesHolder(mRightArm, tx, ty)

     四:interpolater差值器:

    AccelerateDecelerateInterpolator   在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

    AccelerateInterpolator                     在动画开始的地方速率改变比较慢,然后开始加速

    AnticipateInterpolator                      开始的时候向后然后向前甩

    AnticipateOvershootInterpolator     开始的时候向后然后向前甩一定值后返回最后的值

    BounceInterpolator                          动画结束的时候弹起

    CycleInterpolator                             动画循环播放特定的次数,速率改变沿着正弦曲线

    DecelerateInterpolator                    在动画开始的地方快然后慢

    LinearInterpolator                            以常量速率改变

    OvershootInterpolator                      向前甩一定值后再回到原来位置

             

  • 相关阅读:
    HTML中,input元素的 Disabled属性 所产生的后端无法接收数据的问题
    计算字符串中大写字母,小写字母,数字的出现次数
    实现正整数的加法计算器
    简单的用户登陆程序
    对奇偶数的处理
    如何使用循环计算1 + 2 +3 + 4 + 5 + 6 + 8 + 9 + 10的值
    计算100以内所有整数的和
    根据用户输入的月份显示对应的美食
    根据用户输入的年龄输出不同的信息
    整齐的输出一首古诗
  • 原文地址:https://www.cnblogs.com/luofangli/p/14663256.html
Copyright © 2020-2023  润新知