У меня есть пользовательский вид, который заполняет весь экран. (Клавиатура пианино) Когда пользователь прикасается к ключу, он вызывает вызов invalidate()
, и вся клавиатура перерисовывается, чтобы показать новое состояние с помощью косвенного ключа.Android: Как получить пользовательский вид, чтобы частично перерисовать?
В настоящее время представление очень простое, но я планирую добавить немного более приятную графику. Поскольку вся клавиатура динамически визуализируется, это сделает перерисовку всей клавиатуры более дорогой.
Итак, я подумал, давайте посмотрим на частичную перерисовку. Теперь я звоню invalidate(Rect dirty)
с правильной грязной областью. Я установил свой метод onDraw(Canvas canvas)
только для рисования ключей в грязной области, если я действительно хочу частично перерисовать. Это приводит к тому, что эти клавиши нарисованы, но остальная клавиатура полностью черная/не нарисована вообще.
Я ошибаюсь в ожидании, что вызов invalidate(Rect dirty)
будет «кэшировать» текущий canvas
, и только «разрешает» рисование в грязном регионе?
Есть ли способ достичь того, чего я хочу? (Путь к «Кэш» холст и только перерисовывать грязную зону»
Хмм, мне не нравится это solutnio, потому что причина, по которой его ключи частично нарисованы, состоит в том, что он должен сначала полностью рисовать свои кандавы. Поэтому вопрос заключается в том, почему его полотно не правильно рисовало. – 2012-11-08 18:55:01
Мне нужно заметить, что теперь я понимаю, что когда вы вызываете 'invalidate' с грязным' rect', вы можете просто использовать свой обычный код чертежа, и он должен фактически выполнять операции рисования, которые находятся в грязном 'rect'. 'Canvas' отбрасывает операции, которые находятся за пределами' rect'. Тем не менее, это означает, что многое из вашего собственного кода все еще отображается, и в моих тестах с ускорением HW на нем было медленнее, чем просто просмотр представления полностью. – Peterdk
Обратите внимание, что для рисования растровых изображений на холсте параметр paint может быть нулевым, например. 'canvas.drawBitmap (bitmap, 0, 0, null)'. – greg7gkb