イメージビューのリフレッシュについて質問があります。基本的に、ボタンとサイコロを持っています。サイコロを数回(サイコロのロールをシミュレートするために)0.5秒回転させ、最後に停止させたい。問題は、最終結果しか見えないことです。ダイスロールのシミュレーションが実行されていますが、変更が表示されていません (イメージビューが更新されていません)。これを実装する方法についての私の誤った理解だと思います。
この問題を単純なプロジェクト (数行のコード) に切り分けました。ここからダウンロードできます (試す時間があれば): http://dl.dropbox.com/u/26268461/vrtiKocku_eng. rar
コード全体は次のようになります。
package com.viscode.vrtiKocku;
import java.util.Random;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class VrtiKockuActivity extends Activity {
/** Called when the activity is first created. */
private final Handler mHandler = new Handler();
Random randomGenerator = new Random();
private ImageView dice1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dice1 = (ImageView)findViewById(R.id.imageView1);
mHandler.post(mRollDice);
}
private final Runnable mRollDice = new Runnable() {
public void run() {
Button buttonRollDice = (Button) findViewById(R.id.buttonRollDice);
buttonRollDice.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Integer rand, rollSimulationTimeLimit = 500, rollDuration = 100;;
//simulate dice roll for 500 ms, by 5 rolls at 100 ms
while (rollDuration < rollSimulationTimeLimit) {
rand = randomGenerator.nextInt(6) + 1;
postaviKocku(rand, dice1);
// wait and SHOW the simulated roll for 100 ms = rollDuration
try {
Thread.sleep(rollDuration);
} catch (InterruptedException e) {
e.printStackTrace();
}
rollDuration += rollDuration;
}
}
});
}
};
//this procedure sets the imageview to the proper image, based on the rolled number
private void postaviKocku(Integer rand, final ImageView dice) {
switch (rand) {
case 1:
dice.setImageDrawable(getResources().getDrawable(R.drawable.one_red));
break;
case 2:
dice.setImageDrawable(getResources().getDrawable(R.drawable.two_red));
break;
case 3:
dice.setImageDrawable(getResources().getDrawable(R.drawable.three_red));
break;
case 4:
dice.setImageDrawable(getResources().getDrawable(R.drawable.four_red));
break;
case 5:
dice.setImageDrawable(getResources().getDrawable(R.drawable.five_red));
break;
case 6:
dice.setImageDrawable(getResources().getDrawable(R.drawable.six_red));
break;
default:
break;
}
}
}