2014-10-28 98 views
0

即時編碼ImageButton的onClick方法,我必須將按鈕中的圖像與我資源文件夾中的另一個圖像進行比較以完成一些操作。 這是我寫的代碼,在這裏我把一些日誌消息:比較Android中的Drawables無法正常工作

public void onClick(View v){ 
    Log.e(LOGTAG, "bolarojo: "+getResources().getDrawable(R.drawable.bolarojo).getConstantState().toString()); 
    Log.e(LOGTAG, "bolaclic: "+v.getBackground().getConstantState().toString()); 
    if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.bolarojo).getConstantState())){ 
     Log.e(LOGTAG, "buh"); 

它表明: bolarojo:[email protected] bolaclic:android.graphics.drawable.StateListDrawable $ StateListState @ 41070780 既然v拿着R.drawable.bolarojo不應該日誌消息是相同的?無論如何,我不明白爲什麼它不顯示「埠」。

回答

0

如果您查看要處理的對象的類型,您會看到其中一個對象具有類型爲BitmapState的常量狀態,而另一個對象的值爲StateListState。自然地,比較不同類型的兩個對象將導致它們不相等。即使這樣,即使它們來自相同的drawable,兩個ConstantState也不能保證相等。不直接比較背景,而是從外部追蹤狀態。這可能會更容易,更可靠。

+0

你能解釋一下多一點你是什麼意思時,你說「從外部追蹤狀態」?現在我知道哪個是錯誤,但不知道如何解決。 – Alex 2014-10-29 08:44:58

+0

沒有更多的上下文我不能給你一個具體的例子,但基本上你只是想維護另一個跟蹤變量,例如,如果你已經改變了背景,就是這樣。 – 2014-10-29 11:11:59

0

好吧,最後我解決了它。我沒有從視圖中要轉換成的ImageButton

ImageButton bla=(ImageButton)v; 

然後我用了getDrawable()方法,它工作正常:d

bla.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.bolarojo).getConstantState()); 
+0

請小心使用getResources,這與api 21及以上版本不兼容。這是如何解決,以確保兼容API 21及以下。 http://stackoverflow.com/questions/27463737/compatibility-of-getcontext-and-getresource-between-5-0-and-lower – Phil3992 2014-12-21 15:22:24

相關問題