StateListDrawable не работает в методе OnDraw() KeyboardView

Я пытаюсь динамически изменить фон клавиатуры во время выполнения. Но рисование списка состояний не работает в методе onDraw класса KeyboardView. Мой письменный код -

@Override
public void onDraw(@NonNull Canvas canvas) {
    List<Key> keys = getKeyboard().getKeys();
    for (Key key : keys) {
        StateListDrawable states = new StateListDrawable();


        states.addState(new int[]{android.R.attr.state_pressed},
                new ColorDrawable(Color.BLUE));
        states.addState(new int[]{},
                new ColorDrawable(Color.YELLOW));

        states.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
        states.draw(canvas);

        Paint paint = new Paint();
        paint.setTextAlign(Paint.Align.CENTER);
        paint.setTextSize(24);
        paint.setColor(Color.GRAY);

        if (key.label != null) {
            canvas.drawText(key.label.toString(), key.x + (key.width / 2),
                    key.y + (key.height / 2), paint);
        } else {
            key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
            key.icon.draw(canvas);
        }
    }
}

Пожалуйста, помогите мне.

1 ответ

Я удалил StateListDrawable и динамически изменил фон с помощью следующего условия в методе onDraw.

if(key.pressed){
    Drawable dr = new ColorDrawable(Color.BLUE);
    dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
        dr.draw(canvas);
}else{
    Drawable dr = new ColorDrawable(Color.YELLOW);
    dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height);
        dr.draw(canvas);
}
Другие вопросы по тегам