2

这是我的问题:

在第一次单击按钮时,我设置了视图的背景

public void clickOnButton(View v){
      if(compareDrawable(getResources().getDrawable(R.drawable.green_button), v.getBackground())) {
          v.setBackgroundResource(R.drawable.red_button);
      }else{
          v.setBackgroundResource(R.drawable.green_button);
      }
}

比较函数有这个代码的地方:

    public boolean compareDrawable(Drawable d1, Drawable d2){
    try{
        Bitmap bitmap1 = ((BitmapDrawable)d1).getBitmap();
        ByteArrayOutputStream stream1 = new ByteArrayOutputStream();
        bitmap1.compress(Bitmap.CompressFormat.JPEG, 100, stream1);
        stream1.flush();
        byte[] bitmapdata1 = stream1.toByteArray();
        stream1.close();

        Bitmap bitmap2 = ((BitmapDrawable)d2).getBitmap();
        ByteArrayOutputStream stream2 = new ByteArrayOutputStream();
        bitmap2.compress(Bitmap.CompressFormat.JPEG, 100, stream2);
        stream2.flush();
        byte[] bitmapdata2 = stream2.toByteArray();
        stream2.close();

        return bitmapdata1.equals(bitmapdata2);
    }
    catch (Exception e) {
        // TODO: handle exception
    }
    return false;
}

我已经尝试使用其中一些比较:

    if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.green_button).getConstantState()))

或者

    if(getResources().getDrawable(R.drawable.green_button).hashCode() == v.getBackground().hashCode())

xml文件的代码是这样的:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
    <shape>
        <solid
            android:color="#70c656" />
        <stroke
            android:width="1dp"
            android:color="#53933f" />
        <corners
            android:radius="3dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>
<item>
    <shape>
        <gradient
            android:startColor="#70c656"
            android:endColor="#53933f"
            android:angle="270" />
        <stroke
            android:width="1dp"
            android:color="#53933f" />
        <corners
            android:radius="4dp" />
        <padding
            android:left="10dp"
            android:top="10dp"
            android:right="10dp"
            android:bottom="10dp" />
    </shape>
</item>

但它们不起作用,它们每次都返回 false 。我怎样才能比较这些对象?

4

1 回答 1

0

为什么你需要比较 Drawables 只是为了来回改变图像?

而是使用CheckBoxor otherCompoundButton并使用selector具有 4 种状态的 xml:

  • 检查并按下
  • 检查
  • 按下
  • 默认
于 2013-06-24T23:24:53.760 回答