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

Posted

技术标签:

【中文标题】尝试获取按钮的背景颜色时出现 java.lang.ClassCastException【英文标题】:java.lang.ClassCastException when trying to get background color of a button 【发布时间】:2017-03-26 13:58:38 【问题描述】:

我希望在单击按钮时获取它的背景颜色。如果背景颜色与名为 "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();

【问题讨论】:

颜色永远不会是R.color.blue_color,因为R.color.blue_color 不是颜色。它是颜色资源的标识符。我建议您使用单独的boolean 或其他字段来跟踪按钮的状态。 【参考方案1】:

你应该使用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();

我没有测试过这段代码,但做了一些搜索,在***上找到了这些sn-ps...

【讨论】:

我不能使用 ColorDrawable btc = (ColorDrawable) btn.getBackground().getColor();有一条消息说“无法解析方法'getColor” 试试这个:可绘制背景 = btn..getBackground(); if (background instanceof ColorDrawable) Color color = ((ColorDrawable) background).getColor(); 必需的 android.graphics.Color ,在 Color 中找到 int color = ((ColorDrawable) background).getColor();

以上是关于尝试获取按钮的背景颜色时出现 java.lang.ClassCastException的主要内容,如果未能解决你的问题,请参考以下文章

在服务类中添加权限以获取位置时出现 java.lang.ClassCastException

获取位置时出现 java.lang.NullPointerException

创建具有许多 div 的按钮时出现问题

尝试读取 .xlsm 文件时出现 java.lang.NoSuchMethodError

尝试遍历字符串时出现 java.lang.StringIndexOutOfBoundsException

尝试通过 servlet 连接 mySql 时出现“java.lang.ClassNotFoundException”