2013-05-21 2 views
-2

Я пытаюсь сделать так, чтобы кнопка меняла цвет textView на WHITE, но затем на втором нажатии меняет его на BLUE, а третий нажимает на RED и т. Д. Когда я это пробовал, он выбирает только последний (КРАСНЫЙ) и больше не изменится. У кого-нибудь есть идеи, как я могу это сделать? Действительно застрял. Вот код:Как кнопка может изменять цвет 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

istead of 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; 
      } 
     });