Вопрос

Я искал довольно несколько часов и не смог найти краткое определенное и ваше вопрос на мой вопрос. У меня есть приложение, где мне нужно нарисовать спортивное поле (включая все линии тона) на экран. Пока что я протянул поверхность просмотра и в значительной степени скопировал остальную часть демонстрации 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 или более позднее, чтобы проверить реальную производительность.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top