Android中如何对比ImageView的Tag与另一个ImageView的BackgroundResource?
关于ImageView Tag与BackgroundResource对比的问题解答
咱们先把这两个问题拆开来聊清楚哈:
1. 如何对比ImageView的Tag与它自己的BackgroundResource?
首先得明确两个属性的本质:
ImageView.getTag()返回的是Object类型,你可以往里面存任意对象(比如字符串、整数、自定义类实例都可以)ImageView.getBackgroundResource()返回的是int类型的资源ID(比如R.drawable.bg_red这种)
要实现对比的前提是:你给ImageView设置的Tag必须是它对应的背景资源ID(也就是Integer类型的资源ID)。满足这个前提后,就可以这样写代码:
// 先给ImageView设置Tag为目标背景资源ID imageView.setTag(R.drawable.my_target_bg); // 对比Tag与BackgroundResource if ((Integer) imageView.getTag() == imageView.getBackgroundResource()) { // 两者匹配时执行操作 }
这里要注意:getTag()返回的是Object,必须强制转换成Integer后再和int类型的资源ID对比(Java会自动拆箱,用==没问题,也可以用equals())。如果你的Tag存的不是资源ID,那这种对比就没有实际意义哦。
2. 能否用if (imageview1.getTag() == imageview2.getbackground())来对比?
答案是绝对不行,原因很直观:
imageview2.getBackground()返回的是Drawable对象,而非资源ID- 如果
imageview1.getTag()存的是资源ID(Integer类型),一个是Integer对象、一个是Drawable对象,类型完全不同,==对比的是对象引用,肯定不相等;就算Tag存的是Drawable,两个ImageView的Drawable引用也不一定相同(比如同一个资源ID可能生成不同的Drawable实例)
正确的做法是,获取imageview2的背景资源ID,再和imageview1的Tag对比(前提还是Tag存的是资源ID):
if ((Integer) imageview1.getTag() == imageview2.getBackgroundResource()) { // 执行操作 }
内容的提问来源于stack exchange,提问作者Shah Hussain
相关产品推荐
相关产品推荐

