2

我正在尝试在 ADNROID 中实现一些相对简单的东西。我有一堆 Drawable 存储在一个列表中。我想使用淡入效果创建一个效果,其中可绘制对象一个一个地显示在彼此之上。

我在下面的代码中取得了部分成功。它实际上在我的手机 (Nexus S) 上完美运行,但在我的平板电脑 (ASUS TF101) 上显示闪烁。这可能是由于平板电脑的 CPU 速度更快。

这是我的设置:我已将所有可绘制对象存储在drawables列表中。我还在布局中定义了两个图像,一个在另一个之上:imageViewForegroundimageViewBackground.

这个想法是先设置背景图像,然后启动一个动画,其中前景图像从 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);

有什么想法可以克服这个闪烁的问题吗?

4

0 回答 0