By default, onDraw() isn't called for ViewGroup.
Итак, у меня есть вопрос: что происходит, когда мы устанавливаем фоновый рисунок для ViewGroup?
onDraw() наследуется от класса View, поскольку ViewGroup является подклассом View. Поэтому, когда вы устанавливаете фон для ViewGroup, он работает так же, как и любой другой вид. Когда вы вызываете setBackground для представления, он устанавливает для флага requestLayout значение true и делает представление недействительным.
Кроме того, в официальной документации для класса View указано, что:
If you set a background drawable for a View, then the View will draw it before calling back to its onDraw() method.
Вы можете увидеть, как это работает, в исходном коде класса Android View.
public void setBackgroundDrawable(Drawable d) {
...
{
requestLayout = true;
}
...
computeOpaqueFlags();
if (requestLayout) {
requestLayout();
}
mBackgroundSizeChanged = true;
invalidate(true);
}
Если вы посмотрите документацию для аннулировать (), вы найдете
public void invalidate () Invalidate the whole view. If the view is visible, onDraw(android.graphics.Canvas) will be called at some point in the future.
установить фоновый цвет () и установить фоновый ресурс () используют setBackgroundDrawable() внутри, поэтому они работают одинаково.
Подводя итог, onDraw вызывается в какой-то момент в будущем, когда вы делаете установить фон ().