簡體   English   中英

drawable == drawable?

[英]drawable == drawable?

這是我的問題......:

在我的活動中,我有一個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是相同的,我已經測試了代碼的其他區域,所有似乎都工作正常。

我知道發布此內容已經相當晚了,但對任何人用Google進行搜索都會有用。

我用了 。 getConstantState()比較我的兩個drawables,它就像一個魅力:)

正如Itsik所解釋的那樣,即使兩個變量都包含對“看起來”相同的對象的引用,它們也是兩個不同的對象實例。

==運算符比較引用。 僅當兩個變量都引用同一個對象實例時才返回true。 相同的內存空間。

Drawable和BitmapDrawable都沒有實現一個特定的.equals()方法,該方法可以用於檢查2個實例是否包含相同的數據,因此Mathias Lin暗示嘗試.equals()將無效。

按照Itsik的建議而不必擴展Drawable,你可以做的是使用View.setTag()和View.getTag()方法。 這些方法允許將您選擇的任何Object附加到View並稍后檢索它。 通過在每次更改其內容時將簡單標識符(無論是技術整數標識符還是定義位圖源的URL)附加到ImageView,您將能夠輕松識別它。

嘗試if (acertaindrawable.equals(variabledrawable)) ...

variabledrawable和acertaindrawable不是同一個Object,即使它們可能顯示相同的drawable。

如果android沒有給你一個內置的方法來比較drawables(我猜它取決於你有的具體drawable),我的建議是擴展你正在使用的Drawable類並添加一個包含一些的私有字段一種ID,以便您可以比較drawables。

你也可以嘗試:

getId()和setId():=)

如果標簽已用於其他東西,也可以用於比較:)

Ps。:但請注意你是否使用RelativeLayouts ......:= P.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM