Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较onClickListener中的两个可绘制_Java_Android_Compare_Drawable - Fatal编程技术网

Java 比较onClickListener中的两个可绘制

Java 比较onClickListener中的两个可绘制,java,android,compare,drawable,Java,Android,Compare,Drawable,这是我的问题: 在第一次点击按钮时,我设置了视图的背景 public void clickOnButton(View v){ if(compareDrawable(getResources().getDrawable(R.drawable.green_button), v.getBackground())) { v.setBackgroundResource(R.drawable.red_button); }else{ v.setB

这是我的问题:

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

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()))

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。如何比较这些对象

为什么您需要比较可绘制的内容来来回更改图像

改为使用
复选框
或其他
组合按钮
,并使用
选择器
xml和4种状态:

  • 检查和按压
  • 检查
  • 压制
  • 违约

这个问题已经在这里讨论过了
<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>