我正在尝试在 ADNROID 中实现一些相对简单的东西。我有一堆 Drawable 存储在一个列表中。我想使用淡入效果创建一个效果,其中可绘制对象一个一个地显示在彼此之上。
我在下面的代码中取得了部分成功。它实际上在我的手机 (Nexus S) 上完美运行,但在我的平板电脑 (ASUS TF101) 上显示闪烁。这可能是由于平板电脑的 CPU 速度更快。
这是我的设置:我已将所有可绘制对象存储在drawables
列表中。我还在布局中定义了两个图像,一个在另一个之上:imageViewForeground
和imageViewBackground
.
这个想法是先设置背景图像,然后启动一个动画,其中前景图像从 alpha-0 开始并转到 alpha-1。然后用新的前景图像替换背景,选择一个新的前景(即下一个可绘制对象)并永远循环。
该counter
对象是一个 int 计数器的简单包装器。
这是我的代码:
final Animation fadeInAnimation = new AlphaAnimation(0f, 1f);
fadeInAnimation.setDuration(2000);
fadeInAnimation.setStartOffset(3000);
fadeInAnimation.setFillBefore(false);
fadeInAnimation.setFillAfter(true);
fadeInAnimation.setRepeatCount(Animation.INFINITE);
fadeInAnimation.setRepeatMode(Animation.RESTART);
fadeInAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
imageViewForeground.setImageDrawable(drawables.get(counter.value()));
Log.d(TAG, "onAnimationStart");
}
@Override
public void onAnimationEnd(Animation animation) {
Log.d(TAG, "onAnimationEnd");
}
@Override
public void onAnimationRepeat(Animation animation) {
imageViewBackground.setImageDrawable(drawables.get(counter.value()));
counter.increase();
// the problem appears in this line,
// where the foreground becomes visible for a very small period,
// causing the flickering
imageViewForeground.setImageDrawable(drawables.get(counter.value()));
}
});
imageViewForeground.startAnimation(fadeInAnimation);
有什么想法可以克服这个闪烁的问题吗?