2016-11-20 93 views
0

我正在嘗試製作類似於Simon說的應用程序。播放序列時,我希望每個按鈕都點亮,然後逐個變暗。現在,只有當它是序列中的最後一個時,它纔會變亮,然後變暗按鈕。當點擊一個按鈕,是不是該序列中最後它只會留在一個Alpha的1Android應用程序,從圖案更改按鈕顏色?

This GIF is me playing the first couple turns.

這裏是我的代碼:

public void playSequence() { 
     for (int i = 0; i < sequence.size(); ++i) { 
      spot = 0; 
      cbutton = (Button) sequenceb.get(sequence.get(i)); 
      cbutton.setAlpha((float) 1.0); 

      final Handler handler1 = new Handler(); 
      handler1.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        cbutton.setAlpha((float) 0.35); 
       } 
      }, 500); 
     } 
    } 

我不知道你們是否需要從我的代碼中看到其他東西,因爲我認爲它只是一個邏輯問題。變量'sequence'是一個ArrayList,其中的ints指向序列中的哪個tile,'sequenceb'是指引用其中的板的按鈕的ArrayList。

另外,我很新的android編程,所以這段代碼可能是多餘的,或者真的很糟糕哈哈。

+0

編輯:我想解決的主要問題是,每次調用這個方法時,它都會從頭開始播放模式。 –

回答

0

我最終得到它的工作,雖然這可能是一個可怕的方式來得到它的工作。這裏僅供參考。

public void playSequence() { 
     System.out.println("Sequence Size: " + sequence.size() + ", Spot: " + spot); 
     spot = 0; 
     cbutton = (Button) sequenceb.get(sequence.get(spot)); 

     LightRunnable lRun = new LightRunnable(10); 
     Thread lt = new Thread(lRun); 
     lt.start(); 

     toggleButtons(true); 
    } 

public class DarkRunnable implements Runnable { 
    private int var; 

    public DarkRunnable(int var) { 
     this.var = var; 
    } 

    @Override 
    public void run() { 
     try { 
      ++spot; 
      Thread.sleep(250); 
      cbutton.setAlpha((float) 0.35); 
      System.out.println("Darkening Tile: " + cbutton.getTag()); 
      Thread.sleep(10); 
      fixAlphas((float) 0.35); 
      if(spot < sequence.size()) { 
       cbutton = (Button) sequenceb.get(sequence.get(spot)); 
       LightRunnable lRun = new LightRunnable(10); 
       Thread lt = new Thread(lRun); 
       lt.start(); 
      } 
     } catch(Exception e) {} 
    } 
} 

public class LightRunnable implements Runnable { 
    private int var; 

    public LightRunnable(int var) { 
     this.var = var; 
    } 

    @Override 
    public void run() { 
     try { 
      Thread.sleep(250); 
      cbutton.setAlpha((float) 1.0); 
      System.out.println("Lightening Tile: " + cbutton.getTag()); 
      DarkRunnable dRun = new DarkRunnable(10); 
      Thread dt = new Thread(dRun); 
      dt.start(); 
     } catch (Exception e) {} 
    } 
}