这是我的问题......:
在我的活动中,我有ImageView
和Button
。我希望Button仅在ImageView
显示某个drawable时执行操作。是的,这意味着ImageView
在各种drawable之间进行动画制作,这些drawable被编码为不会因我想要的而中断。
ImageView imgview = (ImageView)findViewById(R.id.imgviewsid);
Resources res = getResources();
Drawable acertaindrawable = res.getDrawable(R.drawable.thecertaindrawable);
Drawable variabledrawable = imgview.getDrawable();
if (variabledrawable == acertaindrawable)
{
//does something
}
它不起作用。我把它缩小到“if(variabledrawable == acertaindrawable)”这一行的错误。虽然Eclipse没有公然报告Android无法识别的错误,如果两个drawables相同,我已经测试了代码的其他区域,并且似乎都运行正常。
答案 0 :(得分:8)
我知道发布此内容已经相当晚了,但对于任何使用谷歌搜索的人来说都会有用。
我使用。getConstantState()
比较我的两个drawables,它就像一个魅力:)
答案 1 :(得分:3)
正如Itsik所解释的那样,即使两个变量都包含对“看起来”相同的对象的引用,它们也是两个不同的对象实例。
==运算符比较引用。仅当两个变量都引用同一个对象实例时才返回true。相同的记忆空间。
Drawable和BitmapDrawable都没有实现一个特定的.equals()方法,该方法可以用于检查2个实例是否包含相同的数据,因此Mathias Lin暗示尝试.equals()将不起作用。
您可以使用View.setTag()和View.getTag()方法,按照Itsik的建议而不必扩展Drawable。这些方法允许将您选择的任何Object附加到View并稍后检索它。通过在每次更改其内容时将简单标识符(无论是技术整数标识符还是定义位图源的URL)附加到ImageView,您将能够轻松识别它。
答案 2 :(得分:2)
尝试if (acertaindrawable.equals(variabledrawable)) ...
答案 3 :(得分:2)
variabledrawable和acertaindrawable不是同一个Object,即使它们可能显示相同的drawable。
如果android没有给你一个比较drawables的内置方法(我猜它取决于你有的具体drawable),我的建议是扩展你正在使用的Drawable类并添加一个私有字段它拥有某种ID,以便您可以比较drawables。
答案 4 :(得分:1)
您也可以尝试:
getId()和setId():=)
如果标签已用于其他内容,也可用于比较:)
Ps。:但注意如果你正在使用 RelativeLayouts ......:= P