1

アクティビティの開始時にイメージ ビュー イメージを継続的に変更します。スレッドを使用せずにそれは可能ですか?少なくとも、スレッドを適切に使用する方法と、どのように開始する必要があるかを教えてください。お願いします。、

それは、Android ゲームのようなもぐらたたき用です。


ランダムなテキストの単純な表示を試みましたが、うまくいきませんでした。

public class NewGame extends Activity {

    gameThread gameOn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newgame);

        hView = (TextView) findViewById(R.id.HammersText);
        gameOn = new gameThread();
        gameOn.start();
    }
}

public class gameThread extends Thread
{
    NewGame gameOn;

    public void run() {
        super.run();

        Random ramhole = new Random();
        int hole = ramhole.nextInt(8);

        Random ramletter = new Random();
        int letter = ramletter.nextInt(26);

        gameOn = new NewGame();

        gameOn.hView.setText("Hole = "+hole+"Letter = "+letter);
    }

}

これについて私を助けてください。

4

2 に答える 2

0

Thread の代わりに countdownTimer を使用する

new CountDownTimer(9000000, 5000) {

 public void onTick(long millisUntilFinished) {
       Random ramhole = new Random();
        int hole = ramhole.nextInt(8);

        Random ramletter = new Random();
        int letter = ramletter.nextInt(26);
        hView.setText("Hole = "+hole+"Letter = "+letter);
 }

 public void onFinish() {
   //Restart timer if you want.
 }
}.start();

あなたはまだスレッディングを行うことができますが、あなたがやろうとしていることはやり過ぎです。また、あなたの場合、あなたはできません

gameOn = new NewGame();  

アクティビティは常にフレームワークによって初期化される必要があります。また、setText API は常に Ui スレッドから呼び出す必要があります。たぶんそれがあなたのアプリが機能していない理由です

于 2012-10-19T17:45:24.437 に答える
0

メイン UI スレッドでのみ UI に触れる必要があるため、スレッドを使用することにした場合は、AsyncTaskを確認する必要があります。

それが私のゲームであれば、ホールごとに新しい AsyncTask を開始します。doInBackground では、ランダムな時間だけスリープしてから、進行状況を公開します。すべての onProgressUpdate で、ほくろが表示されます。奇数の onProgressUpdate ごとに、ほくろを非表示にします (ハッキングされていない場合)。 onProgressUpdate で表示/非表示を処理することにより、自動的にメイン UI スレッドになるため、心配する必要はありません。穴ごとに個別のスレッドを使用できます。穴/ほくろのよりダイナミックな競技場を持つことができます。

于 2012-10-19T17:51:42.180 に答える