2014-10-28 52 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

相关问题