-
Title:
02-07 Visualize_and_Fix_Overdraw_-_Solution
-
Description:
02-07 Visualize_and_Fix_Overdraw_-_Solution
-
У нас должно быть четыре
ненужных элемента background
-
в оставшихся файлах.
-
Давайте разберемся с ними.
-
Первый — в XML-файле с основными процессами.
Здесь мы оставляем белый фон намеренно.
-
Но в XML-файле
-
с кодом чата мы лишний раз
объявили белый фон вот здесь.
-
Это действие излишне, поскольку
белый фон уже задан в MainActivity.
-
В этом файле все.
-
В XML-файле с кодом для
индивидуальных элементов чата
-
у нас три ненужных элемента background.
-
Вот этот нам не нужен.
Вот этот тоже.
-
И последний внизу:
этот белый фон в разметке не нужен.
-
Так что мы можем их удалить.
-
Отлично.
-
Посмотрим, что нам
удалось сделать с наложениями.
-
Вот так должен выглядеть ваш экран,
-
если вы удалили
все ненужные элементы background.
-
Аккуратнее, правда?
-
Хорошая работа.
-
Мы почти закончили.
-
Но нам нужно внести
еще одну поправку.
-
Обратите внимание на наложение
в области аватаров.
-
Здесь сначала отрисовывается
прямоугольник, а уже поверх него — аватар.
-
Давайте поступим хитрее.
-
Пусть фон задаётся только тогда,
когда аватар не удалось обнаружить.
-
Это можно сделать
путем добавления условия.
-
Хорошо.
-
Откроем код ChatAdapter,
который отвечает
-
за наполнение элементов чата
при их загрузке.
-
Перейдем к методу getView.
-
В самом низу есть логическое выражение,
которое одновременно
-
выводит на экран аватар
и фоновую заливку.
-
Попробуем сделать его
чуть более рациональным.
-
Напишем код, который
будет задавать цвет фона
-
только при отсутствии аватара,
-
а при его наличии
делать фон прозрачным
-
и просто загружать аватар.
-
Это можно реализовать следующим образом.
-
Вот так выглядит новый код.
-
Когда аватар отсутствует,
мы просто загружаем
-
фон прозрачного цвета туда,
где должен был находиться аватар,
-
а затем задаем настоящий
цвет фона.
-
При выполнении условия else,
когда аватар есть в наличии,
-
происходит обычная загрузка
этого аватара.
-
а затем устанавливается
прозрачный цвет фона.
-
Так мы минимизируем наложение.
-
Посмотрим, как эти изменения
исправили ситуацию.
-
Отлично.
-
Как можно заметить,
-
с обновленным кодом
наложений стало значительно меньше.
-
Это была последняя оптимизация.
На этом здесь всё.
-
Повторим последовательность шагов.
-
В самом начале
наложение было намного заметнее.
-
Мы установили для атрибута drawable
значение null.
-
Затем мы удалили ненужные
объявления фона
-
из XML-разметки.
-
И, наконец, мы ввели условие,
по которому цвет фона отображается
-
только при отсутствии аватара.
-
После этих поправок
получился вот такой результат.
-
Здесь значительно
меньше наложений при отрисовке.
-
Отличная работа.
-
И помните: perf помогает!