drawable == drawable?

时间:2010-12-12 07:40:21

标签: java android button imageview drawable

这是我的问题......:

在我的活动中,我有ImageViewButton。我希望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相同,我已经测试了代码的其他区域,并且似乎都运行正常。

5 个答案:

答案 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