java.lang.ClassCastException при попытке получить цвет фона кнопки
Я хочу, чтобы при нажатии кнопки получался цвет фона. Если цвет фона совпадает с цветом в ресурсах с именем "blue_color", сделайте фон прозрачным. Или сделайте его "blue_color". Я попробовал метод, упомянутый здесь, но он дает мне ошибку.
Код:
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:
Неустранимое исключение: main java.lang.ClassCastException: android.graphics.drawable.InsetDrawable не может быть приведено к android.graphics.drawable.ColorDrawable
в строке где
ColorDrawable btc = (ColorDrawable) btn.getBackground();
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) );
Идентификатор цвета теперь blueColorWithAlpha
так что вы можете сравнить его с кнопкой. Чтобы получить идентификатор цвета кнопки, вы можете сделать это: int color = ((ColorDrawable)button.getBackground()).getColor();
Я не тестировал этот код, но провел поиск и нашел эти фрагменты в stackru...