交替更改按钮背景

时间:2017-01-08 13:12:04

标签: android

我有一个Android项目,我需要使用一个开关。 我正在使用Button。 我有两个图像,一个用于状态,另一个用于关闭状态。最初我给“off_image”作为Button的背景。当用户单击该按钮时,背景应更改为“on_image”,当用户再次单击该按钮时,应更改回“off_image”。

我正在使用以下代码,但它无效....

onClick方法--->

if(button.getBackground().equals(R.drawable.off_image)
        button.setImageResource(R.drawable.on_image);
if(button.getBackground().equals(R.drawable.on_image)
        button.setImageResource(R.drawable.off_image);

请将我视为新手并提供详细的解决方案。

谢谢。

4 个答案:

答案 0 :(得分:0)

好的,保存一个全局var lastImageResource。

int lastImageResource= R.id.off_image;

现在,每次切换后台更新时都会这样:

if(lastImageResource  == (R.id.off_image)){
        button.setImageResource(R.id.on_image);
        lastImageResource = R.id.on_image;
}
if(lastImageResource  == (R.id.on_image)){
        button.setImageResource(R.id.off_image);
        lastImageResource = R.id.off_image;
}

现在应该可以了。

答案 1 :(得分:0)

使用getConstantState()

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                    drawableDownloaded=holder.iv_catch_status.getDrawable().getConstantState() == context.getDrawable(R.drawable.ic_cloud_download).getConstantState();
                }else{
                    drawableDownloaded=holder.iv_catch_status.getDrawable().getConstantState() == context.getResources().getDrawable(R.drawable.ic_cloud_download).getConstantState();
                }

并设置图片

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                this.statusImage.setImageDrawable(context.getDrawable(R.drawable.ic_play));
            }else{
                this.statusImage.setImageDrawable(context.getResources().getDrawable(R.drawable.ic_play));

            }

答案 2 :(得分:0)

你怎么使用R.id.image

这些是drawable,使用R.drawable.image

此外,

您正在设置ImageResource,但请检查背景。 两者都是不同的东西。

为什么不使用boolean

boolean isOn = false

然后切换它。

答案 3 :(得分:0)

比较常数状态并使用setBackgroundResource(),如下所示:

final Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (button.getBackground().getConstantState().equals(getDrawable(R.drawable.ic_menu_camera).getConstantState())){
                button.setBackgroundResource(R.drawable.ic_menu_gallery);
            }
            else if(button.getBackground().getConstantState().equals(getDrawable(R.drawable.ic_menu_gallery).getConstantState())){
                button.setBackgroundResource(R.drawable.ic_menu_camera);
            }
        }
    });

如果minSdkVersion小于21,请使用getResources().getDrawable()代替getDrawable()方法。