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