天天看点

Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118766558

本文出自【赵彦军的博客】

文章目录

  • AnimatorSet
  • playTogether
  • playSequentially
  • after(Animator anim)
  • before(Animator anim)
  • after(long delay)
  • with(Animator anim)

AnimatorSet

实现组合动画功能主要需要借助

AnimatorSet

这个类.

playTogether

多个动画一起执行。

var myView: Button = findViewById(R.id.bt)

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)

val set = AnimatorSet()
set.playTogether(rotation, translationX)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           
Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

playSequentially

多个动画顺序执行。

var myView: Button = findViewById(R.id.bt)
        
var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)

val set = AnimatorSet()
set.playSequentially(rotation, translationX)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           
Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

after(Animator anim)

将现有动画插入到传入的动画之后执行

var myView: Button = findViewById(R.id.bt)

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)

val set = AnimatorSet()
set.play(rotation).after(translationX)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           

旋转动画

插入到

平移动画

之后。所以总体效果是:

先执行平移动画,然后再执行旋转动画

Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

before(Animator anim)

将现有动画插入到传入的动画之前执行。

var myView: Button = findViewById(R.id.bt)

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)

val set = AnimatorSet()
set.play(rotation).before(translationX)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           

旋转动画

插入到

平移动画

之前。所以总体效果是:

先执行旋转动画,然后再执行平移动画

Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

after(long delay)

将现有动画插入到传入的动画之后执行。相当于延迟执行。

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)

val set = AnimatorSet()
set.play(rotation).before(translationX).after(2000)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           

先把 rotation 放在 translationX 之前,执行顺序是:

rotation -> translationX

然后把整体动画放在 after(2000) 之后,执行顺序是 :

延迟 2 秒 -> rotation -> translationX

Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)

with(Animator anim)

多个动画同时执行。

var myView: Button = findViewById(R.id.bt)

var rotation = ObjectAnimator.ofFloat(myView, "rotation", 0f, 360f)
var translationX = ObjectAnimator.ofFloat(myView, "translationX", 0f, 360f)
var alpha = ObjectAnimator.ofFloat(myView, "alpha", 0f, 1f)

val set = AnimatorSet()
set.play(rotation).with(translationX).after(alpha)
set.duration = 2000
set.interpolator = LinearInterpolator()
set.start()
           

旋转动画 和 平移动画一起执行,然后整体放在 alpha 动画后面。所以整体执行顺序是:

先执行 alpha 动画,然后一起执行 旋转动画、平移动画。

Android属性动画 AnimatorSetAnimatorSetplayTogetherplaySequentiallyafter(Animator anim)before(Animator anim)after(long delay)with(Animator anim)