尝试获取按钮的背景颜色时的java.lang.ClassCastException

时间:2016-11-12 13:13:30

标签: android android-background

我想要点击一个按钮来获取它的背景颜色。如果背景颜色与名为“blue_color”的资源中的颜色相同,请使背景透明。让它成为 “blue_color”。我尝试了here提到的方法,但它给了我错误。

代码:

    btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
                ColorDrawable btc = (ColorDrawable) btn.getBackground();
                int colorId = btc.getColor();
                if(colorId == R.color.blue_color){
                btn.setBackgroundColor(Color.TRANSPARENT);
               }else{
               btn.setBackgroundColor(getResources().getColor(R.color.blue_color));
               }
             }
   });
来自logcat的

错误:

  

致命的例外:主要                                                                          java.lang.ClassCastException:android.graphics.drawable.InsetDrawable无法强制转换为android.graphics.drawable.ColorDrawable

  

ColorDrawable btc =(ColorDrawable)btn.getBackground();

1 个答案:

答案 0 :(得分:0)

您应该使用btn.getBackground().getColor();

在你的代码中,你得到了一个可绘制的...... 所以该行应该是:

ColorDrawable btc = (ColorDrawable) btn.getBackground().getColor();

编辑:您可以从以下资源中获取颜色的int ID:

int alpha = ... // 0-255
int blueColor = ResourcesCompat.getColor(getResources(), R.color.blue_color, null);
int blueColorWithAlpha = Color.argb( 
alpha, 
Color.red(blueColor), Color.green(blueColor), Color.blue(blueColor) );

颜色的ID现在为blueColorWithAlpha,因此您可以将其与按钮进行比较。要获取按钮的颜色ID,您可以这样做:int color = ((ColorDrawable)button.getBackground()).getColor();

我没有测试过这段代码,但做了一些搜索,发现这些片段在stackoverflow上...