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...

Другие вопросы по тегам