Пользовательский виджет с использованием Linearlayout не получает OnDraw ()
-
28-09-2019 - |
Вопрос
Я создаю пользовательский виджет, простирающийся 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, который вы хотите нарисовать.
Не связан с StackOverflow