最近在做Android项目,遇到一个问题,需要判断一个控件的背景图片是不是某张图片

如题,上代码了
all.setBackgroundResource(R.drawable.bg_cloudy_day);

Drawable drawable=getResources().getDrawable(R.drawable.bg_cloudy_day);
Drawable drawable1=all.getBackground();
但是判断if(drawable==drawable1){
}
结果是false,大神告诉我为什么啊,该怎么去判断呢

直接比较Drawable肯定是行不通的,你虽然引用的是同一个资源,但是它们是2个不同的对象,这就已经是false了,还有就是同一楼说的,java里等号只比较内存地址,这就更false了,建议你换一个思路,不用比较Drawable,android里每个图片系统都会给他对应生成一个R值,你直接比较这个值吧。记得用equals比较。

如果是等号比较,是比较的内存地址,这是两个不同的对象,肯定返回false,Drawable有重写其equals方法吧,你看下它的这个方法源码,你试试equals比较相等看看,我用手机不方便看源码,也不知道是不是这样

比较图片的话耗费太多资源,不建议直接比较Drawable,可以在设置时记录资源ID,也可以使用状态来判断

http://blog.csdn.net/ly513782705/article/details/11227573
http://blog.csdn.net/wangbole/article/details/22876179
我找到的一些资料。

//先获取本地资源引用名称,type name是R.drawable.background中的"drawable",entry name是"background"

String resTypeName = getContext().getResources().getResourceTypeName(id);

String resEntryName = getContext().getResources().getResourceEntryName(id);

//然后创建皮肤包所在应用的Context

Context apk = getContext().createPackageContext(packageName,

Context.CONTEXT_IGNORE_SECURITY)

//然后就是获取皮肤包中的资源id了

int drawavleId = apk.getResources().getIdentifier(resEntryName, resTypeName,

apk.getPackageName());

可以拿到2张图片的ID,然后对ID进行判断。