2011-03-29 84 views
1

我目前正在製作我的第一個Android應用程序,我需要一些幫助。我正在製作的應用程序是記憶遊戲Simon。延遲切換圖像

所以我有點有2個問題:

1)當用戶按壓的顏色按鈕中的一個,所述按鈕開關的背景圖像以一個發光的版本。但是,如何在稍微延遲後再次獲得原始背景圖像的按鈕?我使用計時器任務(僅適用於紅色按鈕)嘗試了它,但是當我嘗試這樣做時,應用程序崩潰。

2)當計算機經歷顏色組合時,這也應該自動發生。有沒有辦法把它放在一個可以調用的獨立函數中?

這裏是代碼: package android.Simon;

import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.SystemClock; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; 導入android.widget.Chronometer; import android.widget.TextView; import java.util.Random; import java.util.Timer; import java.util.TimerTask;

public class Simon extends活動時間表計時錶m計時錶; int [] ComArray = new int [100]; int gebruikergetal; int i = 0; int j = 0; int aantalcomgetallen = 1; //變量來確定計算機必須顯示的顏色數量 int gebruikerteller; //變量來確定是否用戶輪到 int startstop = 1; int delay = 1000;

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button button; 
    final TextView textView = (TextView) findViewById(R.id.textView1); 
    final Button button1; 
    final Button button2; 
    final Button button3; 
    final Button button4; 

    for(i=0;i<100;i++){ 
     for(j=0;j<4;j++){ 
      ComArray[i] = RandomCreator.getRandomInt(1, 4); 
     } 
    } 

    i=0; 

    mChronometer = (Chronometer) findViewById(R.id.chronometer1); 

    button = (Button) findViewById(R.id.button5);  
    button1 = (Button) findViewById(R.id.button1); 
    button2 = (Button) findViewById(R.id.button2); 
    button3 = (Button) findViewById(R.id.button3); 
    button4 = (Button) findViewById(R.id.button4); 

    final View.OnClickListener Blauw = new OnClickListener() { 
     public void onClick(View v){ 
      //int GebruikerArray[] = new int[i]; 
      gebruikergetal = 2; 
      button1.setBackgroundDrawable(getResources().getDrawable(0x7f020001)); 
        //here i'm switching the background image of the button 
      textView.setText(String.valueOf(gebruikergetal)); 
      if(gebruikergetal!=ComArray[i]){ 
       textView.setText("Game Over"); 
      } 
      i++; 
     } 
    }; 

    final View.OnClickListener Groen = new OnClickListener() { 
     public void onClick(View v){ 
      //int GebruikerArray[] = new int[i]; 
      gebruikergetal = 3; 
      button2.setBackgroundDrawable(getResources().getDrawable(0x7f020003)); 
      textView.setText(String.valueOf(gebruikergetal)); 
      if(gebruikergetal!=ComArray[i]){ 
       textView.setText("Game Over"); 
      } 
      i++; 
     } 
    }; 

    final View.OnClickListener Rood = new OnClickListener() { 
     public void onClick(View v){ 
      //int GebruikerArray[] = new int[i]; 
      Timer timer = new Timer(); 

      gebruikergetal = 1; 
      button3.setBackgroundDrawable(getResources().getDrawable(0x7f020006)); 
      //this is where I try out the timer task, but the app crashes 
        TimerTask task = new TimerTask(){ 
       public void run(){ 
         button3.setBackgroundDrawable(getResources().getDrawable(0x7f020005)); 
       } 
      }; 
      timer.scheduleAtFixedRate(task, 0, 1000); 
      textView.setText(String.valueOf(gebruikergetal)); 
      if(gebruikergetal!=ComArray[i]){ 
       textView.setText("Game Over"); 
      } 
      i++; 
     } 
    }; 

    final View.OnClickListener Geel = new OnClickListener() { 
     public void onClick(View v){ 
      //int GebruikerArray[] = new int[i]; 
      gebruikergetal = 4; 
      button4.setBackgroundDrawable(getResources().getDrawable(0x7f020009)); 
      textView.setText(String.valueOf(gebruikergetal)); 
      if(gebruikergetal!=ComArray[i]){ 
       textView.setText("Game Over"); 
      } 
      i++; 
     } 
    }; 
    View.OnClickListener mStartListener = new OnClickListener() { 
     public void onClick(View v) { 
      if(startstop == 1){ 
       mChronometer.start(); 
       textView.setText("Com Turn!"); 
       button1.setOnClickListener(Blauw); 
       button2.setOnClickListener(Groen); 
       button3.setOnClickListener(Rood); 
       button4.setOnClickListener(Geel); 
       startstop = 0; 
      } 
      else{ 
       startstop = 1; 
       mChronometer.stop(); 
       textView.setText(""); 
      } 
     } 
    }; 
    button.setOnClickListener(mStartListener); 
} 

}

如果有人能幫忙,我會很感激。 Thx

回答

1

拋出你必須在一個方法中做的事情,並使用所謂的處理程序和可運行的。

private Handler mHandler; 

mHandler = new Handler(); 
mHandler.postDelayed(switchImages, delay (in milliseconds); 

private Runnable switchImages = new Runnable() { 
     public void run() { 
      //Whatever method you make call here 
       mHandler.postDelayed(switchImages, delay); 
       //This will call it again therefore continuous updating; 
     } 
    };