2016-12-16 78 views
0

我寫了一個記憶遊戲應用程序,我有一個函數調用「OnImageButtonClick」,我插入到佈局中的每個imageButton的onClick屬性中。 當你點擊圖像時,它應該改變它的圖像,但真正發生的是隻有在函數結束後圖像纔會真正改變。Android上setImageResource imageButton

public void onImageButtonClick(View v) throws InterruptedException { 
    int cardIndex = Integer.parseInt(v.getTag().toString()); 
    ImageButton card = (ImageButton)v; 
    Resources resources = this.getResources(); 
    int imageId = resources.getIdentifier(imageArr[cardIndex-1], "drawable", this.getPackageName()); 
    card.setImageResource(imageId); 


    if(isFirst) { 
     pickedCards[0] = card; 
    } 
    else { 
     pickedCards[1] = card; 
    } 

    PickCard(); 
} 

public void PickCard() throws InterruptedException{ 
    try { 
     Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
      Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification); 
      r.play(); 
     } catch (Exception e) { 
      Toast.makeText(this, "Can't play music", Toast.LENGTH_LONG); 
     } 

     if(!isFirst) { 
      if (pickedCards[0].getBackground() == pickedCards[1].getBackground()){ 
       Points++; 
      } 
      else { 
       Thread.sleep(1000); 
       pickedCards[0].setImageResource(R.drawable.card); 
       pickedCards[1].setImageResource(R.drawable.card); 
      } 
     } 

     isFirst = !isFirst; 
    } 

問題是PickCard發生在圖像實際更改之前。

+0

聽起來a'like使用任務沉重的記憶。 PickCard()做什麼? – Opiatefuchs

+0

看看我的編輯@Opiatefuchs –

+0

下面是我說的一個例子:http://stackoverflow.com/a/15709457 –

回答

0

試試這個,有點複雜,但可能工作:

創建的AsyncTask並執行第一種方法(更改圖像資源),執行後的第一個方法,然後onPostExecute方法調用PickCard()。

下面是一些文檔,如何做到這一點: https://developer.android.com/reference/android/os/AsyncTask.html


public class ImgBtnClick extends AsyncTask<ImageButton, Void, Void> { 


public ImgBtnClick (Context contexts) { 
    context = contexts; 
} 


@Override 
protected void onPreExecute() { 
    //Insert Here the code to change the Image resource 
    /* 
int cardIndex = Integer.parseInt(v.getTag().toString()); 
ImageButton card = (ImageButton)v; 
Resources resources = this.getResources(); 
int imageId = resources.getIdentifier(imageArr[cardIndex-1], "drawable", this.getPackageName()); 
card.setImageResource(imageId); 


if(isFirst) { 
    pickedCards[0] = card; 
} 
else { 
    pickedCards[1] = card; 
} 
    */ 
} 

@Override 
protected void onPostExecute(String[] result) { 
    PickCard() 
    } 

} 
+0

但爲什麼我需要異步呢?它不需要那麼困難 –

+0

因爲這可以安全地解決你的問題,它可以做你需要的東西:) 我希望這解決了你的問題:D –