2

ADNROID で比較的単純なものを実装しようとしています。リストにたくさんの Drawables が保存されています。フェードイン効果を使用して、ドローアブルを 1 つずつ重ねて表示する効果を作成したいと考えています。

以下のコードで部分的に成功しました。実際、私の電話 (Nexus S) では問題なく動作しますが、タブレット (ASUS TF101) ではちらつきが見られます。これはおそらく、タブレットの CPU が高速であるためです。

これが私のセットアップですdrawables。リストにすべてのドローアブルを保存しました。また、レイアウトに 2 つの画像を定義し、一方を他方の上に重ねましimageViewForegroundimageViewBackground

背景画像を最初に設定してから、前景画像がアルファ 0 からアルファ 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