zp19910219
2015-12-02 14:53
采纳率: 28%
浏览 3.0k

最近在做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,大神告诉我为什么啊,该怎么去判断呢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • JackWaiting 2015-12-03 11:26
    已采纳

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

    点赞 打赏 评论
  • kevin-go 2015-12-02 15:00

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

    点赞 打赏 评论
  • Lewis_Wjj 2015-12-02 16:31

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

    点赞 打赏 评论
  • daaitudian 2015-12-03 13:45

    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());

    点赞 打赏 评论
  • 勤学的小蘑菇 2015-12-05 08:10

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

    点赞 打赏 评论

相关推荐 更多相似问题