Как ImageView просто перерисовывает часть своего содержимого при вызове invalidate (Rect)? - PullRequest
7 голосов
/ 06 апреля 2010

Я новичок в разработке для Android, просто читаю документы и пробую API-интерфейсы. Я запутался, как ImageView удалось нарисовать только часть его содержимое после недействительного (Rect) вызова.

Я проверил ImageView.java, не нашел другого метода рисования, кроме onDraw (Canvas), но onDraw (Canvas) обрезает только рисуемый объект, если он за видимой границей вида. Я также читал реализацию View.invalidate (Rect), я думаю, ключ этой функции вызывает mParent.invalidateChild (this, r); Тем не менее, я думаю, что родительский взгляд не знает, как нарисовать ребенка в данный Rect, он, наконец, должен вызвать некоторый метод этого дочернего закрасить.

Кто-нибудь исследовал эту часть кодов? Не могли бы вы дать мне какой-нибудь гид?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2011

Насколько я могу понять, есть две оптимизации, идущие одна. Например, если дочерний элемент является группой просмотра, перерисовываются только те дочерние элементы этой группы, которые пересекают недействительную область. Также холст обрезается до границ этого прямоугольника. Это означает, что меньшее количество пикселей должно быть перетасовано через шину в кадровый буфер и что операции рисования, которые полностью обрезаны, могут быть пропущены.

Это полуобразованное предположение. Я просмотрел источник несколько месяцев назад и довольно уверен в вещах ViewGroup. Второй можно протестировать, переопределив отсечение в onDraw и проверив, перерисовывает ли он все.

1 голос
/ 19 декабря 2010

Полагаю, этот код находится в классе View.

В группе Google есть два интересных ответа от Ромена Гая.

0 голосов
/ 24 января 2011

Я думаю, что android рисует вид так же, как canvas в j2me, весь код отрисовки не отрисовывается напрямую на аппаратном уровне (экран), он просто отрисовывается в буфер, или отрисовывается, или что-то в этом роде. Когда мы вызываем View.invalidate (Rect), система копирует изображение из прямоугольника буфера (или отрисовки) на аппаратное обеспечение (экран).

...