我想要点击一个按钮来获取它的背景颜色。如果背景颜色与名为“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();
答案 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上...