Сегодня я получил отчет о сбое, потому что в следующем фрагменте w
и / или h
равны нулю. Я перезаписываю dispatchDraw
на своем обычном ViewGroup
, чтобы нарисовать наложение после рисования детей:
@Override
public void dispatchDraw(Canvas canvas) {
super.dispatchDraw(canvas);
int w = getWidth();
int h = getHeight();
bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
// ...
}
Я внимательно прочитал документацию и, честно говоря, не могу понять, почему я должен беспокоиться о размере вида, потому что, когда система запрашивает чертеж, все виды должны быть уже выложены (а это не так). Не имеет смысла рисовать вид, если размер равен нулю). Более того, эту ошибку трудно отследить, потому что я не могу ее воспроизвести и потому что у меня есть только 2 отчета о сбоях при загрузке более 200 тыс. Что не так и как мне его восстановить?
ПРОЧИТАЙТЕ Я знаю, что проблема в том, что widht и высота равны 0. Вопрос почему они равны нулю после того, как дерево было выложено . Каждому фрагменту кода для рисования нужна примитивная информация, такая как ширина и высота, поэтому глупо, чтобы я проверял, чтобы они были ненулевыми каждый раз, когда я переопределяю onDraw
или dispatchDraw
. Это должно быть обработано системой, и большую часть времени, так как я никогда не был в состоянии воспроизвести эту ошибку и получил только два отчета о сбое