另一种方法是使用 Android 的 View Animator 类之一,例如 ObjectAnimator。这就是我正在做的事情:
1) 将要使用的图像的可绘制 ID 添加到 int 数组中。
2) 为fadeIn 和fadeOut 动画创建ObjectAnimators。您可以根据需要设置淡入和淡出的持续时间。
3) 将 AnimatorListener 添加到 fadeOut ObjectAnimator,这样当它完成时,它将设置新图像(通过从图像数组中选择一个随机数随机选择),然后它将与新图像一起淡入,使用fadeIn ObjectAnimator。
4) 创建一个runnable,并在它的run方法中,启动fadeOut动画。
5) 在可运行对象上调用 handler.postDelayed 并使用它来决定您希望每个图像在淡出之前保留多长时间。
6) 在 Runnable 的 run 方法结束时,再次调用 handler.postDelayed 以使图像继续淡入淡出,但您应确保有某种条件语句以便可以停止动画当你需要时,这就是为什么我使用布尔“运行”,所以当我需要停止处理程序循环时,我可以将它设置为 false。
ImageView mImageView = (ImageView) findViewById(R.id.imageView);
boolean running = true;
final int[] images = {R.drawable.image1, R.drawable.image2, R.drawable.image3,
R.drawable.image4, R.drawable.image5};
final Random random = new Random();
final Handler handler = new Handler();
final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mImageView, "alpha", 0f, 1f);
fadeIn.setDuration(1000);
final ObjectAnimator fadeOut = ObjectAnimator.ofFloat(mImageView, "alpha", 1f, 0f);
fadeOut.setDuration(1000);
fadeOut.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
int rand = random.nextInt(images.length);
mImageView.setImageResource(images[rand]);
fadeIn.start();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
Runnable runnable = new Runnable() {
@Override
public void run() {
fadeOut.start();
if (running) {
handler.postDelayed(this, 5000);
}
}
};
handler.postDelayed(runnable, 5000);
}
这将通过淡入/淡出动画连续循环播放您选择的图像(随机)。您可以添加一些检查以确保同一图像不会连续出现两次,等等。