我正在尝试在ADNROID中实现相对简单的东西。我有一堆存储在列表中的Drawables。我想创建一个效果,其中drawables使用淡入效果逐个显示在彼此之上。
我使用下面的代码取得了部分成功。它实际上在我的手机(Nexus S)上运行完美,但它在我的平板电脑上显示出闪烁(华硕TF101)。这可能是因为平板电脑具有更快的CPU。
以下是我的设置:我已将所有Drawables存储在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);
我有什么想法可以克服这个闪烁的问题?