-
Title:
02-12 Fixing_Overdraw_with_Canvas_API
-
Description:
02-12 Fixing_Overdraw_with_Canvas_API
-
Хорошо, вот мы вернулись в Android Studio,
-
на страницу исходного кода
для нашего DroidCardsView.
-
И снова вот оно —
наше пользовательское представление.
-
Напоминаю, именно в этом
пользовательском представлении
-
мы создаем нашу стопку игральных карт.
-
Например, у каждой карты
есть свой рисунок,
-
и мы рисуем их на экране,
переопределяя метод onDraw.
-
Запомните, после
переопределения метода onDraw
-
Android не сможет оптимизировать
построение этого представления,
-
поэтому наша задача как разработчиков —
правильно обрезать каждую карту
-
при ее перетаскивании на экран,
чтобы избежать ненужного перерисовывания.
-
К счастью, API Canvas предоставляет нам
правильные методы,
-
нужные для более эффективного рисования
наших карт.
-
Заглянем в документацию.
-
Воспользуемся методом canvas.clipRect
для улучшения нашего кода.
-
Мы собираемся применить здесь
этот вариант,
-
принимающий в качестве параметров четыре
числа с плавающей запятой.
-
Хорошо, мы снова в Android Studio.
-
Поправим то, как рисуется
каждая из каскада карт,
-
чтобы уменьшить перерисовку.
-
Я собираюсь использовать эту изящную
возможность Android Studio,
-
чтобы загрузить другое представление,
позволяющее видеть состояние кода
-
до и после изменения.
-
Теперь, находясь в сравнительном
представлении, подробно рассмотрим
-
метод onDraw, который мы переопределили.
-
Слева находится старое состояние
цикла,
-
но давайте сфокусируемся на улучшениях,
которые мы собираемся выполнить справа.
-
Теперь, по ходу перебора карт в цикле,
пройдемся по каждому из шагов улучшения.
-
В первую очередь мы собираемся
рассчитать положение карты.
-
Затем нам нужно вызвать
функцию canvas.save,
-
которая сохранит текущее
состояние нашего холста.
-
Другими словами,
-
она сохраняет состояние экрана,
существовавшее до применения API clipRect.
-
Теперь при вызове метода clipRect
мы по существу налагаем
-
некоторые геометрические ограничения.
-
Передавая эти параметры,
мы фактически приказываем системе
-
рисовать только часть карты,
которая должна быть видимой.
-
Очевидно, оставшаяся ее
часть будет скрыта.
-
Теперь будут перерисовываться
только те части карты,
-
которые находятся внутри заданных границ.
-
Наконец, мы собираемся
вызвать метод canvas.restore,
-
который должен вернуть холст
в состояние до обрезки.
-
Другими словами,
-
он должен отменить ограничение,
наложенное при вызове метода clipRect.
-
А затем мы повторяем этот цикл для
всех карт, кроме самой верхней.
-
Теперь специально обработаем верхнюю
-
или последнюю карту иначе,
чем находящиеся под ней.
-
Обрезка этой карты не нужна,
-
поэтому двинемся дальше и нарисуем
ее во всей полноте.
-
Для этого используется показанная
здесь инструкция.
-
Хорошо, скомпилируем
наш улучшенный код и посмотрим,
-
удалось ли нам сократить
количество перерисовок.
-
Шикарно.
-
Как можно видеть, перерисовок
стало намного меньше.
-
Теперь, я надеюсь, ясно,
что API Canvas предоставляет нам
-
простой способ быстрого рисования
при работе
-
с пользовательскими представлениями.
-
О, если захочется узнать
что-нибудь еще об API Canvas,
-
обратитесь к полной документации
в примечаниях инструктора.
-
Итак, представления, подобные этому,
отлично помогут нам в создании уникального
-
и конкурентоспособного UX, но помните,
мы должны соответствующим образом
-
инструктировать Android, чтобы эффективно
отобразить подобные представления.
-
Поэтому при создании каждого представления
обязательно проверяйте перерисовку
-
и будьте готовы оживить старого
друга, метод clipRect.
-
Замечательно, отличная работа.
-
Снова обратимся к Колту
за дополнительной мудростью.