Эффективность рисования на холсте Android

Мне было интересно, есть ли у холста предельная граница.

Я имею в виду, что если я использую такие функции, как drawline(), drawbitmap(), drawcircle(),, действительно ли Android рисует что-то на холсте и тратит впустую некоторые циклы процессора??

потому что после всех функций рисования фактическая печать изображения на экране определяется размером экрана. И если я рисую на чем-то, что выходит за пределы экрана, это не отображается.

Я хочу сделать некоторые мелкие детали на моем холсте, вызвав множество функций рисования, и сделать мою поверхность «шикарной». Если это выходит за рамки, я не хочу их использовать, если они замедляют мой рисунок.

Я работаю над небольшой игрой по структуре SurfaceView, спасибо за любой совет.

Например:

У меня есть робот, идущий от ‹-> b ЗА ПРЕДЕЛАМИ экрана.

требуется 20 функций рисования, чтобы нарисовать изображение шагающего робота на холсте. Если я прокручиваю экран, то вижу робота.

Так что если функция рисования вне экрана действительно занимает столько же времени, сколько и рисование на экране. Я должен обнаружить, что только если положение робота может видеть пользователь, тогда я рисую. в противном случае я не знаю.

если функция рисования не тратит много циклов ЦП, то я могу просто рисовать каждый раз, даже если текущий экран не может видеть робота.


person Steven Shih    schedule 16.10.2010    source источник


Ответы (2)


Ваш холст поддерживается вашим растровым изображением (2D) или openGL (3D, с которым у меня нет опыта). Весь рисунок на вашем холсте обрезается до прямоугольника отсечения, который вы можете увеличивать, уменьшать, пересекать с новыми прямоугольниками или путями и т. д. Таким образом, вы действительно хотите управлять своими прямоугольниками отсечения, прежде чем рисовать на холсте, особенно если он поддерживается большое растровое изображение. Если вы обрежете область, равную размеру экрана, вы сэкономите циклы процессора. Если ваша игра представляет собой игру типа прокрутки, вы можете обрезать область, превышающую размер экрана, и перемещаться по ней, время от времени рисуя за кадром, чтобы обновить область, которая выходит на экран. если в вашей игре есть бесконечная прокрутка во всех направлениях, вам нужно иметь несколько меньших холстов, которые вы можете рисовать вокруг основного центрального холста и переворачивать их слева направо, сверху вниз в зависимости от направлений вашей игры с прокруткой. . Одно большое растровое изображение с одним холстом может занимать слишком много памяти для небольшого устройства.

person Brian Onn    schedule 16.10.2010

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

использовать такую ​​тему, как:

    <style name="Theme.NoBackground" parent="android:Theme">
        <item name="android:windowBackground">@null</item>
    </style>
</resources>

У Ромена Ги есть отличное описание этого явления по адресу http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

person mmeyer    schedule 16.10.2010
comment
Как вы это сделаете, если есть чисто пользовательский рисунок (т.е. нет прикрепленного файла xml)? - person Ben Taliadoros; 23.01.2012
comment
это было потрясающе, так что огромное улучшение - person pt123; 04.02.2014