如何将 AnimationDrawable 与另一个动画组合?
How to combine an AnimationDrawable with another animation?
是否可以将下面这 2 个动画组合在一起?它有效,但必须单独调用它们似乎很奇怪(2次调用 start() )
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketAnimation.start();
rocketImage.animate().x(100).y(100).withLayer().setDuration(500).start();
}
});
参见 AnimatorSet 并使用函数 playTogether
。但是,正如您在评论中提到的,AnimationDrawable
与 AnimatorSet
不兼容。在这种情况下,为了确保两个动画一起开始,你可以这样写
AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketImage.animate().x(100).y(100).withLayer().setDuration(500).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
rocketAnimation.start();
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}).start();
}
});
是否可以将下面这 2 个动画组合在一起?它有效,但必须单独调用它们似乎很奇怪(2次调用 start() )
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketAnimation.start();
rocketImage.animate().x(100).y(100).withLayer().setDuration(500).start();
}
});
参见 AnimatorSet 并使用函数 playTogether
。但是,正如您在评论中提到的,AnimationDrawable
与 AnimatorSet
不兼容。在这种情况下,为了确保两个动画一起开始,你可以这样写
AnimationDrawable rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
rocketImage.animate().x(100).y(100).withLayer().setDuration(500).setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
rocketAnimation.start();
}
@Override
public void onAnimationEnd(Animator animation) {
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
}).start();
}
});