2013-05-21 112 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; 
      } 
     });