2012-10-19 73 views
1

在活動開始時連續更改imageview圖像。如果不是至少告訴我如何正確使用線程,我應該如何啓動它,是否可以不使用線程?請。,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); 
    } 

} 

請幫我出這一點。

+1

「但沒用」是指什麼? –

+0

它說的是這樣的? 10-20 09:47:02.560:E/AndroidRuntime(369):引起:android.content.res.Resources $ NotFoundException:字符串資源ID#0x5 –

回答

0

使用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(); 

活動總是需要通過框架進行初始化。並且應始終從Ui線程調用setText api。也許這就是爲什麼你的應用程序不工作

+0

太好了。我還沒有使用計時器,但我將如何循環連續,以便當我改變彈出痣的圖像時,它將持續只要指定的生命耗盡。 –

+0

請耐心等待,因爲我是一個noob,因爲你知道它。 –

+0

上面的例子持續9000秒,每5秒改變一次文本,但如果你需要更多的時間,你可以重新啓動相同的倒數計時器 – nandeesh

0

你應該只在主UI線程上觸摸UI,所以如果你決定使用線程,那麼你應該看看AsyncTask

如果是我的遊戲,我會爲每個洞開始一個新的AsyncTask。在doInBackground中,它會隨機休眠一段時間,然後發佈進度。在每一個甚至onProgressUpdate它都會顯示痣。在每一個奇怪的onProgressUpdate中,它都會隱藏鼴鼠(如果它沒有被摧毀)。通過處理onProgressUpdate中的顯示/隱藏,你將自動在主UI線程上,所以不用擔心,並且每個洞都有單獨的線程,你有一個更加動態的洞/摩爾比賽場。

+0

我還不熟悉AsyncTask和UI線程。我會繼續閱讀,我會用更多的問題更新你。謝謝。 –