比较Android中的Drawables无法正常工作

时间:2014-10-28 21:31:38

标签: android drawable imagebutton

我为ImageButton编码onClick方法,我必须将按钮中的图像与我的资源文件夹中的另一个图像进行比较来做一些事情。 这是我写的代码,我在其中放了一些日志消息:

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:android.graphics.drawable.BitmapDrawable$BitmapState@4106ac08 bolaclic:android.graphics.drawable.StateListDrawable$StateListState@41070780 由于v持有R.drawable.bolarojo,日志消息不应该相同吗?无论如何我不明白为什么它不显示“buh”。

2 个答案:

答案 0 :(得分:1)

最后我解决了它。我从View到一个ImageButton进行了一次演员

ImageButton bla=(ImageButton)v;

然后我使用了getDrawable()方法,它运行正常:D

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

答案 1 :(得分:0)

如果你看一下你正在处理的对象的类型,你会发现其中一个对象具有BitmapState类型的常量状态,而另一个对象具有StateListState }。当然,比较不同类型的两个对象将导致它们不相等。即使这样,两个ConstantState也不能保证相等,即使它们来自同一个drawable。不是直接比较背景,而是在外部跟踪状态。这可能会更容易,也更可靠。