Лучший способ обновить / нарисовать только небольшую часть холста (вид), сохранив при этом результаты предыдущего рисунка? (API19)
Это то, что я хочу:
Я использую API уровень 19. У меня есть собственное представление, которое объединяет холст и реализует представление. Я запускаю свое приложение на малобюджетной платформе, но приложение сильно загружено анимацией.
Поэтому мне нужно проявить творческий подход. Я делаю переход и хочу:
A. обновить только часть View вместо всего View, потому что это будет довольно обременительно для оборудования.
Б. сохраняйте последние результаты рисования вместо того, чтобы очищать все и перерисовывать их или, что еще хуже, отображать только небольшую часть, которую я хочу нарисовать, пока все остальное исчезает
В ходе исследований я нашел один способ сделать это, используя Invalidate(rect), где "rect" - это прямоугольная область, которую я хочу обновить.
Мой вопрос: я просто хочу знать, если это единственный способ сделать это? Есть ли лучшие альтернативы?
Вот немного больше графических деталей о том, чего я хочу достичь:
Переход работает следующим образом: кадр за кадром я рисую немного больше рис. A, а не рис. B. Поэтому при воспроизведении анимации создается эффект смахивания, при котором рис A постепенно исчезает и заменяет рис. B, и я уже добился этого. Я сделал это, вызвав метод invalidate() для этого представления и перерисовав ENTIRE VIEW, как и предполагалось для метода invalidate().
Как вы можете видеть на рисунке, в будущем я хочу сократить потребление ресурсов, обновив только часть представления вместо всего представления, поэтому сначала я рисую только рисунок B, затем верхний бит рисунка A, затем немного больше рисунка А, затем немного больше... пока весь рис А не будет нарисован, а Б заменен. Допустим, обе картинки 480*800. Таким образом, для всего процесса я рисую, скажем, 480*100 пикселей или около того, из всех 480*800, что было бы намного, намного быстрее - я могу ошибаться, и вы более чем рады поправить меня.
Пожалуйста, обратите внимание, что я провел большую часть исследований на этом сайте, и не сомневаюсь, что мой конкретный случай ПРЯМО. Многие ответы сосредоточены, например, на сохранении предыдущих нарисованных элементов в контейнере / коллекции, а затем на их чтении и перерисовке - это именно то, что я пытаюсь ИЗБЕГАТЬ, потому что этот метод не только перерисовывает все, но и вводит процесс для хранения и читать ранее нарисованные элементы.
Пожалуйста помоги!