2013-05-21 152 views
-2

我試圖讓一個按鈕將textView的顏色更改爲白色,但隨後在第二次按將其更改爲藍色,然後第三次按下紅色等。當我嘗試它時顯​​然會選擇最後一個(紅色)並且不會再改變。任何人有任何想法我怎麼能做到這一點?真的卡住了。下面的代碼:一個按鈕如何不止一次地改變textView的顏色?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
    setContentView(R.layout.activity_main); 
    dc1 = (TextView)findViewById(R.id.digitalClock1); 
    bt1 = (Button)findViewById(R.id.button1); 

    Handler handler = new RandomMoveHandler((TextView) findViewById(R.id.digitalClock1)); 
    handler.sendEmptyMessage(0); 

    bt1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      dc1.setTextColor(Color.WHITE); 
      dc1.setTextColor(Color.BLUE); 
      dc1.setTextColor(Color.RED); 
     } 
    }); 

} 
+0

將它設置在一個塊一個又一個只會紅色變爲 –

+0

那麼我該如何爲按鈕創建一個數組? –

+0

只需使用case/switch語句即可。 – KaHeL

回答

0
int[] colors = {Color.WHITE, Color.BLUE, Color.RED }; 

    bt1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      Integer tag = (v.getTag() == null) ? 0 : (Integer)v.getTag(); 
      int color = colors[tag]; 
      dc1.setTextColor(color); 
      v.setTag((tag+1)%colors.length); 
     } 
    }); 

我現在不能嘗試。檢查錯字

+0

完美無缺!你能告訴我,如果我想添加更多顏色,我只是將它們與其他顏色一起添加到頂部,還是需要更改其他顏色? –

+0

基於v.setTag((tag + 1)%3);把v.setTag((tag + 1)%colors.length);然後添加其他顏色到陣列 – Blackbelt

+0

你能告訴我,白色,紅色,藍色,綠色,青色和黃色是我可以使用的唯一顏色嗎?我可以不指定十六進制值嗎? –

0

試試這個:

int [] colors = new int[]{Color.WHITE, Color.BLUE, Color.RED}; 
    int index = 0; 
    bt1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       dc1.setTextColor(colors[index]); 
       index++; 
       if(index == colors.length) 
        index = 0; 
      } 
     }); 
1
private int count = 0; 

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
setContentView(R.layout.activity_main); 
dc1 = (TextView)findViewById(R.id.digitalClock1); 
bt1 = (Button)findViewById(R.id.button1); 

Handler handler = new RandomMoveHandler((TextView) findViewById(R.id.digitalClock1)); 
handler.sendEmptyMessage(0); 

    bt1.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch(count) 
     { 
     case 0: dc1.setTextColor(Color.WHITE); count++; break; 
     case 1: dc1.setTextColor(Color.BLUE); count++; break; 
     case 2: dc1.setTextColor(Color.RED); count = 0; break; 
     } 
    } 
}); 
+0

不能引用在不同方法中定義的內部類中的非最終變量計數 –

+0

對不起,請看我的編輯,這將工作 –

+1

如果你做最終計數它的值不能改變 – Blackbelt

0

嗯,看起來像一個初學者問題。 你現在正在做的是,當你點擊按鈕,onClick()方法被調用,然後顏色被設置爲白色,然後藍色,然後在一眨眼的紅色。 你想要做什麼更多的東西像其他的答案

+0

我說了些蠢話嗎?爲什麼我會陷入低谷? – Fabinout

0

你需要計算點擊數,試試這個:

private int flag = 0; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setContentView(R.layout.activity_main2); 
     dc1 = (TextView) findViewById(R.id.digitalClock1); 
     bt1 = (Button) findViewById(R.id.button1); 

     bt1.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       // TODO Auto-generated method stub 
       if (flag == 0) 
        dc1.setTextColor(Color.WHITE); 
       else if (flag == 1) 
        dc1.setTextColor(Color.BLUE); 
       else if (flag == 2) 
        dc1.setTextColor(Color.RED); 

       if (flag++ >= 2) 
        flag = 0; 
      } 
     });