我有一个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);
请将我视为新手并提供详细的解决方案。
谢谢。
答案 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()
方法。