ImageButton - переключение цвета при нажатии

Как я могу переключить цвет ImageButton, когда пользователь нажимает ImageButton?

Я хочу, чтобы ImageButton переключался между красным (питание выключено) и зеленым (питание) при нажатии.

Код:

    ImageButton star, power;
Intent i;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    star = (ImageButton)findViewById(R.id.ibStar);
    star.setOnClickListener(this);

    power = (ImageButton)findViewById(R.id.ibPower);
    power.setOnTouchListener(this);


}

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN ) {
        power.setImageResource(R.drawable.power);

    }
     else if (event.getAction() == MotionEvent.ACTION_UP ) {
        power.setImageResource(R.drawable.power_off);

    }

    return true;
}

person Silesia    schedule 16.08.2012    source источник
comment
Боюсь, вам придется уточнить, в чем именно заключается ваша проблема. Трудно понять, что вы хотите вернуть.   -  person Andrzej Gis    schedule 16.08.2012
comment
После нажатия кнопка становится зеленой - Работает. Нажав еще раз, я хочу, чтобы он был красным (power_off)   -  person Silesia    schedule 16.08.2012


Ответы (3)


Я думаю, это то, что вам нужно.

ImageButton star, power;
Intent i;
boolean isOn=false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    star = (ImageButton)findViewById(R.id.ibStar);
    star.setOnClickListener(this);

    power = (ImageButton)findViewById(R.id.ibPower);
    power.setOnTouchListener(this);


}

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN ) {
        isOn=!isOn; // change its state to the oposite one

        if(isOn)
            power.setImageResource(R.drawable.power);
        else
            power.setImageResource(R.drawable.power_off);
    }

    return true;
}
person Andrzej Gis    schedule 16.08.2012
comment
Мой код работает так же. Я имею в виду, что когда я снова нажимаю кнопку «Назад», чтобы вернуться к красному цвету - person Silesia; 16.08.2012
comment
@Silesia теперь все должно быть в порядке. - person Andrzej Gis; 16.08.2012

Попробуйте использовать OnClickListener вместо OnTouch. Есть несколько способов справиться с этой ситуацией.

Один из способов — иметь boolean, который переключается между true и false, обозначая, включено или выключено питание. А затем проверьте это значение при нажатии ImageButton и соответственно измените цвет ImageButton.

/* The boolean below is
 * declared in the 
 * class and not in a method. 
 * Whatever default value you need, i assumed false. */
private boolean isPowerOn = false;

power = (ImageButton)findViewById(R.id.ibPower);
power.setOnClickListener(new OnClickListener() {
    @Override
        public void onClick(View v) {
            if (isPowerOn) {
                /* set color to red */
                isPowerOn = false;
            } else {
                /* set power to green */
                isPowerOn = true;
            }
        }
    });

ИЛИ

Вы можете проверить цвет ImageButton при нажатии, а затем соответствующим образом изменить цвет. Этот способ кажется немного напуганным. Используйте метод boolean.

person prolink007    schedule 16.08.2012
comment
Я имею в виду только кнопку После нажатия кнопка меняется на зеленую - Работает. Нажав еще раз, я хочу, чтобы он был красным (power_off) - person Silesia; 16.08.2012
comment
Да, я прочитал ваш комментарий выше и изменил ваш вопрос. Ваш вопрос теперь легче понять. - person prolink007; 16.08.2012
comment
Мой код работает так же. Я имею в виду, что когда я снова нажимаю кнопку «Назад», чтобы вернуться к красному цвету - person Silesia; 16.08.2012
comment
Обновил мой ответ вашей новой информацией, дайте мне знать, если у вас есть какие-либо вопросы. - person prolink007; 16.08.2012

Если вы хотите, чтобы событие нажатия кнопки отображало другой цвет (т.е. во время события нажатия), используйте селектор, как показано в Выбор фона кнопки.

Если вы хотите, чтобы цвет кнопки переключался между красным и зеленым после события onClick, используйте onClickListener() (псевдокод):

onClick(ImageButton ib)
{
 if (button is green)
  ib.setImageResource(red)
 else
  ib.setImageResource(green)
}
person CSmith    schedule 16.08.2012