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