我试图连续播放几个动画,一个接一个。这些动画将是简单的变换(移动图像视图一定距离)或更复杂的帧动画。
在研究这个问题时,AnimatorSet起初似乎是一个很好的解决方案。它允许您制作要播放的动画队列,然后按特定顺序执行它们。
// defining an example animation
Animator anim = ObjectAnimator.ofFloat(v, "alpha", 0f)
.setDuration(100);
AnimatorSet set = new AnimatorSet();
// dictating the order in which the animations will be played
set.playSequentially(anim, skewAnim, wobbleAnim);
set.start();
问题在于,据我所知,你无法定义一个Animator对象来放置在xml文件中定义的动画中的AnimatorSet。
另外,AnimationSet(注意不同的名字)只允许你同时播放几个动画,所以这个类不能用于我的目的。
有人知道从项目中的xml对象定义Animator对象的方法吗?或者,是否还有另一种方法可以完全播放一系列动画?
更新:
AnimatorSet set = new AnimatorSet();
Animator anim1 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim1.setTarget(myView1);
Animator anim2 = AnimatorInflater.loadAnimator(getApplicationContext(), R.animator.sample);
anim2.setTarget(myView2);
anim1.setDuration(3000);
anim2.setDuration(3000);
anim1.setInterpolator(new CycleInterpolator(5));
anim2.setInterpolator(new CycleInterpolator(5));
set.playSequentially(anim1,anim2);
set.start();
答案 0 :(得分:3)
要从xml将动画加载到AnimatorSet中,您的xml应包含AnimatorObjects而不是动画。然后你可以使用AnimatorInflater将这些animatorObjects加载到你的AnimatorSet中,如下所示:
AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(getActivity(), R.animator.sample);
xml会喜欢这样的东西:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:ordering="sequentially"
>
<objectAnimator
android:propertyName="alpha"
android:duration="500"
android:valueTo="1f"
/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
的更多详情,请参阅此链接
要在不同视图上播放顺序动画,您可以使用AnimationListeners。
anim1.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
// start anim2 from here
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}});