Лучший способ обновить / нарисовать только небольшую часть холста (вид), сохранив при этом результаты предыдущего рисунка?(API19) - PullRequest
0 голосов
/ 31 марта 2019

Вот что я хочу:

Я использую API уровень 19. У меня есть пользовательское представление, которое объединяет холст и реализует представление. Я запускаю свое приложение на малобюджетной платформе, но приложение сильно загружено анимацией.

Так что мне нужно проявить творческий подход. Я делаю переход и хочу:

A. обновить только часть представления вместо всего представления, потому что это будет весьма обременительно для оборудования.

B. сохраняйте последние результаты рисования вместо того, чтобы очищать все и перерисовывать их или, что еще хуже, отображать только небольшую часть, которую я хочу нарисовать, а все остальное исчезает.

Посредством исследования я нашел один способ сделать это, используя Invalidate (rect), где «rect» - прямоугольная область, которую я хочу обновить.

Мой вопрос: я просто хочу знать, это единственный способ сделать это? Есть ли лучшие альтернативы?

Вот немного больше графических деталей о том, чего я хочу достичь:

Иллюстрация

Переход работает следующим образом: кадр за кадром я рисую немного больше рис. A, а не рис. B. Поэтому, когда воспроизводится анимация, создается впечатление, что существует эффект смахивания, при котором рис A постепенно исчезает и заменяет рис. B, и Я уже достиг этого. Я сделал это, вызвав метод invalidate () для этого представления и перерисовав ENTIRE VIEW, как и предполагалось для метода invalidate ().

Как вы можете видеть на картинке, в будущем я хочу сократить потребление ресурсов, обновив только часть представления вместо всего представления, поэтому сначала я рисую только рисунок B, а затем верхний бит изображения A, затем немного больше рисунка A, затем немного больше ... пока не будет нарисован весь рисунок A и не заменен B. Допустим, обе картинки 480 * 800. Таким образом, для всего процесса я рисую, скажем, 480 * 100 пикселей или около того, из всех 480 * 800, что было бы намного, намного быстрее - я могу ошибаться, и вы более чем рады поправить меня.

Пожалуйста, обратите внимание, что я провел большую часть исследований на этом сайте, и, без сомнения, обращайтесь к моему конкретному случаю ПРЯМО. Многие ответы сосредоточены, например, на сохранении предыдущих нарисованных элементов в контейнере / коллекции, а затем на их чтении и перерисовке - это именно то, что я пытаюсь ИЗБЕГАТЬ, потому что этот метод не только перерисовывает все, но и вводит процесс для хранения и читать ранее нарисованные элементы.

Пожалуйста, помогите!

...