2

これは非常に小さな質問であることを私は知っています。しかし、私はこれの理由を理解することはできません。私のプログラムでは、ループを50回実行します。ループ内で、0から5までのランダムな整数を生成し、画像(サイコロの画像)をimageViewにロードします。したがって、imageViewは急速に変化するはずであり、サイコロの値が急速に変化しているような視覚的なものを見ることができるはずです。

しかし、imageViewにそのような変化は見られず、ループの終わりに、imageViewはすぐに変化します。つまり、初期のサイコロの値が2の場合、ループが終了するまで2のままになり、その後、imageViewが突然5またはそのような値に変化します。 。

ループが非常に高速に実行されているため、サイコロのimageViewの変化を確認できないことに気付きました。次に、 ループ実行速度制御を実行した後、Thread.sleepメソッドを配置しましたが、それでも変更はありません。

これは私のコードです:

ImageView dice = (ImageView) findViewById(R.id.imageViewrollingdiceOne);
for (int i=0;i<50;i++){
        int randomNum = random.nextInt(6);
        System.out.println("Random Value"+randomNum);
        dice.setImageResource(images[randomNum]);
        try {
            Thread.sleep(200);
        } catch (Exception e) {
            System.out.println("ex called");
        }
    }

誰かがこれの理由を説明できますか?logcatでエラーが発生していません。

これはlogcatです:

02-05 18:38:38.515: D/OpenGLRenderer(27058): Flushing caches (mode 0)
02-05 18:38:42.179: D/TextLayoutCache(27455): Using debug level: 0 - Debug Enabled: 0
02-05 18:38:42.239: D/libEGL(27455): loaded /system/lib/egl/libGLES_android.so
02-05 18:38:42.239: D/libEGL(27455): loaded /system/lib/egl/libEGL_mali.so
02-05 18:38:42.249: D/libEGL(27455): loaded /system/lib/egl/libGLESv1_CM_mali.so
02-05 18:38:42.249: D/libEGL(27455): loaded /system/lib/egl/libGLESv2_mali.so
02-05 18:38:42.279: D/OpenGLRenderer(27455): Enabling debug mode 0
02-05 18:38:50.146: D/OpenGLRenderer(27455): Flushing caches (mode 0)
02-05 18:38:52.148: I/System.out(27455): Random Value0
02-05 18:38:52.348: I/System.out(27455): Random Value4
02-05 18:38:52.579: I/System.out(27455): Random Value2
02-05 18:38:52.789: I/System.out(27455): Random Value1
02-05 18:38:53.029: I/System.out(27455): Random Value2
02-05 18:38:53.219: I/System.out(27455): Random Value4
02-05 18:38:53.420: I/System.out(27455): Random Value1
02-05 18:38:53.620: I/System.out(27455): Random Value1
02-05 18:38:53.830: I/System.out(27455): Random Value5
02-05 18:38:53.870: D/dalvikvm(27455): GC_CONCURRENT freed 1035K, 11% free 9856K/10979K, paused 12ms+2ms
02-05 18:38:54.070: I/System.out(27455): Random Value1
02-05 18:38:54.300: I/System.out(27455): Random Value5
02-05 18:38:54.501: I/System.out(27455): Random Value1
02-05 18:38:54.701: I/System.out(27455): Random Value4
02-05 18:38:54.931: I/System.out(27455): Random Value1
02-05 18:38:55.131: I/System.out(27455): Random Value1 
02-05 18:38:55.331: I/System.out(27455): Random Value1
02-05 18:38:55.532: I/System.out(27455): Random Value1
02-05 18:38:55.732: I/System.out(27455): Random Value1
02-05 18:38:55.942: I/System.out(27455): Random Value3
02-05 18:38:56.162: I/System.out(27455): Random Value1
02-05 18:38:56.362: I/System.out(27455): Random Value4
02-05 18:38:56.563: I/System.out(27455): Random Value5
02-05 18:38:56.763: I/System.out(27455): Random Value0
02-05 18:38:56.973: I/System.out(27455): Random Value2
02-05 18:38:57.193: I/System.out(27455): Random Value4
02-05 18:38:57.393: I/System.out(27455): Random Value3
02-05 18:38:57.594: I/System.out(27455): Random Value4
02-05 18:38:57.794: I/System.out(27455): Random Value4
02-05 18:38:58.004: I/System.out(27455): Random Value0
02-05 18:38:58.204: I/System.out(27455): Random Value0 
02-05 18:38:58.404: I/System.out(27455): Random Value5
02-05 18:38:58.605: I/System.out(27455): Random Value0
02-05 18:38:58.805: I/System.out(27455): Random Value5
02-05 18:38:59.005: I/System.out(27455): Random Value0
02-05 18:38:59.215: I/System.out(27455): Random Value2
02-05 18:38:59.415: I/System.out(27455): Random Value5
02-05 18:38:59.616: I/System.out(27455): Random Value2
02-05 18:38:59.816: I/System.out(27455): Random Value5
02-05 18:39:00.016: I/System.out(27455): Random Value4
02-05 18:39:00.216: I/System.out(27455): Random Value3
02-05 18:39:00.416: I/System.out(27455): Random Value4
02-05 18:39:00.617: I/System.out(27455): Random Value4
02-05 18:39:00.817: I/System.out(27455): Random Value1
02-05 18:39:01.027: I/System.out(27455): Random Value5
02-05 18:39:01.227: I/System.out(27455): Random Value3
02-05 18:39:01.427: I/System.out(27455): Random Value3
02-05 18:39:01.628: I/System.out(27455): Random Value5
02-05 18:39:01.828: I/System.out(27455): Random Value2 
02-05 18:39:02.028: I/System.out(27455): Random Value0
02-05 18:39:02.228: I/System.out(27455): Random Value2
4

2 に答える 2

3

スレッドの作成を使用するか、ハンドラを使用してメイン UI スレッドをスリープ状態にする代わりに、次のThread.sleepように ImageView の画像を変更するのを待ちます。

new Handler().postDelayed(new Runnable() {
       public void run() {

            // put your code here to change image in ImageView...

       }
     }, 200);
于 2013-02-05T13:20:56.383 に答える
1

問題を解決しました。上記の回答も非常に役に立ちました。

run メソッド内で使用されます。

handler.postDelayed(this, 200);

そしてそれはうまくいきました。これが完全な答えです。これを参照してください。

final Handler handler = new Handler();
Handler.postDelayed(new Runnable(){
public void run(){
    int randomNum = random.nextInt(6);
    dice.setImageResource(images[randomNum]);
    handler.postDelayed(this, 200);
    }
 }, 200);

ありがとう。

于 2013-02-06T17:16:53.507 に答える