У меня есть пользовательский вид, который заполняет весь экран. (Фортепианная клавиатура)
Когда пользователь прикасается к ключу, он вызывает вызов invalidate()
, и вся клавиатура перерисовывается, чтобы показать новое состояние с помощью троянца.
В настоящее время представление очень простое, но я планирую добавить немного более приятную графику. Поскольку вся клавиатура динамически визуализируется, это сделает перерисовку всей клавиатуры более дорогой.
Итак, я подумал, давайте посмотрим на частичную перерисовку. Теперь я вызываю invalidate(Rect dirty)
с правильной грязной областью. Я установил метод onDraw(Canvas canvas)
только для рисования ключей в грязной области, если я действительно хочу частично перерисовать. Это приводит к рисованию этих клавиш, но остальная часть клавиатуры полностью черная/не нарисована вообще.
Я ошибаюсь в ожидании, что вызов invalidate(Rect dirty)
будет "кэшировать" текущий canvas
и только "разрешает" рисование в грязном регионе?
Есть ли способ добиться того, чего я хочу? (Способ "кешировать" холст и только перерисовывать грязную область? "