Эффективный 2D рисунок в Android
-
25-09-2019 - |
Вопрос
Я искал довольно несколько часов и не смог найти краткое определенное и ваше вопрос на мой вопрос. У меня есть приложение, где мне нужно нарисовать спортивное поле (включая все линии тона) на экран. Пока что я протянул поверхность просмотра и в значительной степени скопировал остальную часть демонстрации Lunarlander. Все данные Приложение требует нарисовать шаг к правильным размерам, получается от розетки, который тоже работает нормально. Однако в минуту в функции ONDRAW () я рисую все линии каждый кадр, который вызывает довольно медленный карамель в эмуляторе (например, ~ 10fps). Вот моя функция ondraw ():
@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}
Затем я рисую круги и разные позиции на этом фоне. Мой вопрос в том, как я могу сделать это более эффективным? Есть ли способ, которым я могу рисовать линии на инициализации приложений и не приходится перерисовать их каждый кадр?
Спасибо за любую помощь.
Решение
Вы должны определенно кэшировать любой холст, который не изменится на растровое изображение в времени инициализации, а затем нарисовать это растровое изображение в Ondraw (). Это поможет представлять времена много. Что-то типа:
Bitmap mField = null;
void init()
{
mField = new Bitmap(...dimensions...);
Canvas c = new Canvas(mField);
c.drawRect(...);
...
}
void onDraw(Canvas c)
{
c.drawBitmap(mField);
}
Другие советы
Ваша спортивная площадка статическая или прокрутка по экрану? Если это статично, вы должны подумать, чтобы построить его один раз и сохранить его как изображение, которое будет перерисован каждый раз. Еще одна вещь: эмулятор очень медленный по сравнению с современными устройствами. Вы должны проверить свою производительность, по крайней мере, на G1 или более позднее, чтобы проверить реальную производительность.