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