1

DialogFragment 内の ImageView の画像を 1 秒ごとに変更したい。コードは Android 5 または 4 で正常に実行されています。しかし、Android 2.3.7(api 10)では、UIを一度変更してからUIを変更しません.一方、スレッドはこれまでのところ問題なく実行されています.Timer、ハンドラ通常メソッド、runOnUIThreadでハンドラメッセージメソッドを試しました。View.Post メソッドですが、うまくいきません

Bitmap[] onItems = new Bitmap[3];
Bitmap[] offItems= new Bitmap[3];
ImageView[] cheatHoldrs = new ImageView[3];
public Dialog onCreateDialog(Bundle savedInstanceState) {


//all Bitmaps and ImageView has been inited
myMethod();


}

View.Post メソッド:

for (int i = 0; i < 3; i++) {
        final int j = i;
        cheatHoldrs[j].post(new Runnable() {

            @Override
            public void run() {
                random Random = new Random();
                cheatHoldrs[j].setImageBitmap((random.nextInt(3) % 3 == 1) ? onItems[j]
                        : offItems[j]);
                cheatHoldrs[j].postDelayed(this, 1000);

            }
        });
    }

RunOnUIThread

getActivity().runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub


            Random random = new Random();
            for (int j = 0; j < 3; j++)
                cheatHoldrs[j]
                        .setImageBitmap((random.nextInt(3) % 3 == 1) ? onItems[j]
                                : offItems[j]);
            new Handler().postDelayed(this, 1000);
        }
    });

通常のハンドラー メソッド:

    final Handler handler = new Handler();
    handler.post(new Runnable() {

        @Override
        public void run() {
        Random random = new Random();
            for (int j = 0; j < 3; j++)
                cheatHoldrs[j]
                        .setImageBitmap((random.nextInt(3) % 3 == 1) ? onItems[j]
                                : offItems[j]);
            handler.postDelayed(this, 1000);    
        }
    });

ハンドラ メッセージ メソッド :{ グローバル スコープ内 :

public Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        Random random = new Random();
        for (int j = 0; j < 3; j++)
            cheatHoldrs[j]
                    .setImageBitmap((random.nextInt(3) % 3 == 1) ? onItems[j]
                            : offItems[j]);
    }
};

OnCreateDialog で:

Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            mHandler.obtainMessage(1).sendToTarget();

        }
    }, 0, 1000);

}

編集:私は最終的に問題が何であるかを知っています。スレッドは正常に動作しており、アニメーションを使用しない場合、UI が更新されます。ダイアログが表示され始めたとき。アニメーションを開始し、ImageViews (cheatHoldrs) を移動します。アニメーション ImageViews 画像が変更された後。私はこのように9oldroidアニメーションとTranslateAnimationを試しましたが、アニメーション後にUIを変更することはまだありません.

        TranslateAnimation animation = new TranslateAnimation(0, forLeft, 0, 0);
    animation.setFillAfter(true);
    animation.setDuration(1000);

    cheatHoldrs[1].startAnimation(animation);
    TranslateAnimation animation2 = new TranslateAnimation(0, forLeft, 0, 0);
    animation2.setFillAfter(true);
    animation2.setDuration(1000);

    cheatHoldrs[2].startAnimation(animation2);

    TranslateAnimation animation3 = new TranslateAnimation(0, forRight, 0, 0);
    animation3.setFillAfter(true);
    animation3.setDuration(1000);

    cheatHoldrs[0].startAnimation(animation3);

そしてnineoldandroidsメソッド:

    com.nineoldandroids.animation.ObjectAnimator transitionForFirst = com.nineoldandroids.animation.ObjectAnimator
            .ofFloat(cheatHoldrs[0], "translationX", forRight);
    transitionForFirst.setDuration(1000);

    com.nineoldandroids.animation.ObjectAnimator transitionForSecound = com.nineoldandroids.animation.ObjectAnimator
            .ofFloat(cheatHoldrs[1], "translationX", forLeft);
    transitionForSecound.setDuration(1000);

    com.nineoldandroids.animation.ObjectAnimator transitionForThird = com.nineoldandroids.animation.ObjectAnimator
            .ofFloat(che

atHoldrs[2], "translationX", forLeft);
        transitionForThird.setDuration(1000);

        transitionForFirst.start();
        transitionForSecound.start();
        transitionForThird.start();
4

0 に答える 0