Возможно ли выполнить onDraw() сразу после invalidate(Rect)?

#java #android #ondraw #invalidation

#java #Android #ondraw #недействительность

Вопрос:

Я добавил точку останова в свой метод onDraw() и заметил, что мой отладчик попадает туда только после завершения метода, в котором invalidate(rect) . Возможно ли вызвать сразу после? Потому что мне нужно дважды вызвать invalidate(rect) в моем методе.

Заранее спасибо.

Ответ №1:

Нет. Вызов invalidate() является сигналом для фреймворка о том, что часть экрана загрязнена и ее необходимо перерисовать. Фактическое рисование происходит не сразу… это произойдет в следующий раз через очередь событий основного потока.

Комментарии:

1. Хм, ну, я могу реализовать другой способ сделать это. Кстати, если я хочу, чтобы две мои грязные зоны были разделены на прямоугольники, если я сделаю invalidate(rect1), то invalidate(rect2) оба прямоугольника будут признаны недействительными, верно?

Ответ №2:

Я столкнулся с такой проблемой со мной, и, как сказал Алекс, этого не произойдет. Я могу предложить одно обходное решение, при котором у вас может быть своя собственная реализация onDraw() метода с другим именем, например myOnDraw() , только тогда, когда он должен быть не очень тяжелым. таким образом, вместо того, чтобы вызывать или зависеть от onDraw() того, чтобы быть вызванным немедленно, вы можете вызвать этот метод, который будет работать для вас, когда вам это нужно.

Комментарии:

1. И как myOnDraw() будет отображать объекты в представлении, если это не собственный метод Android?

2. для этого вам нужна только ссылка на canvas .. и, вероятно, вы переопределили onDraw() в своем классе.