Пользовательский виджет с использованием Linearlayout не получает OnDraw ()

StackOverflow https://stackoverflow.com/questions/3480769

Вопрос

Я создаю пользовательский виджет, простирающийся LinearLayout:

public class MyWidget extends LinearLayout {
    private static Paint PAINT = new Paint(Paint.ANTI_ALIAS_FLAG);
    static {
        PAINT.setColor(Color.RED);
    }

    public MyWidget(Context context) {
        this(context, null);
    }

    public MyWidget(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(canvas.getWidth() / 2, canvas.getHeight()/2, canvas.getWidth()/2, PAINT);
        // never gets called :-(
    }

    @Override
    protected void dispatchDraw(Canvas canvas) {
        super.dispatchDraw(canvas);
        // this gets called, but with a canvas sized after the padding.
    }
}

Я могу добавить детей просто в порядке, но я никогда не получаю свой обычай onDraw() называется. dispatchDraw() Как называется, но это, кажется, имеет разные холст (тот, который внутри прокладка. Мне нужно нарисовать на всю область макета). Есть ли какой-то флаг, который должен быть установлен, чтобы получить onDraw() Вызывается для макета?

Это было полезно?

Решение

Вам нужно позвонить setWillNotDraw(false) в вашем конструкторе.

Поскольку по умолчанию макет не нужно рисовать, поэтому оптимизация не требует метода рисования. Позвонив setWillNotDraw(false) Вы говорите инструментарий UI, который вы хотите нарисовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top