【问题标题】:ImageButton - toggle color when pressedImageButton - 按下时切换颜色
【发布时间】:2012-08-16 19:24:13
【问题描述】:

当用户按下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;
}

【问题讨论】:

  • 恐怕你必须澄清你的问题到底是什么。很难理解你想要返回什么。
  • 按下按钮后变为绿色 - 它可以工作。再按一下,我希望它变成红色(power_off)

标签: android android-button android-custom-view


【解决方案1】:

我想这就是你需要的。

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;
}

【讨论】:

  • 我的代码工作方式相同。我的意思是,当我再次单击返回按钮以返回红色时
  • @Silesia 现在应该没问题了。
【解决方案2】:

尝试使用OnClickListener 而不是OnTouch。有几种方法可以处理这种情况。

一种方法是让booleantruefalse 之间切换,表示电源是打开还是关闭。然后在按下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 方法。

【讨论】:

  • 我的意思是按钮只有在按下按钮后变为绿色 - 它可以工作。再按一下,我希望它变成红色(power_off)
  • 是的,我阅读了您上面的评论并更改了您的问题。你的问题现在更容易理解了。
  • 我的代码工作方式相同。我的意思是,当我再次单击后退按钮以返回红色时
  • 用您的新信息更新了我的答案,如果您有任何问题,请告诉我。
【解决方案3】:

如果您想让按钮按下事件显示不同的颜色(即在按下事件期间),请使用选择器,如 Button Background Selector 所示。

如果您希望在 onClick 事件后让按钮颜色在红色和绿色之间切换,请使用 onClickListener()(伪代码):

onClick(ImageButton ib)
{
 if (button is green)
  ib.setImageResource(red)
 else
  ib.setImageResource(green)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2013-06-07
    • 2017-02-07
    • 1970-01-01
    相关资源
    最近更新 更多