рисовать () или DrawBitmap ()? - PullRequest
       16

рисовать () или DrawBitmap ()?

0 голосов
/ 28 ноября 2011

Мое приложение рисует на холст в непрерывном цикле и в каждом цикле переоценивает позиции рисованных элементов и циклически их анимирует.У меня вопрос, какой из следующих двух методов лучше и почему?Я новичок, поэтому я не знаю, как тестировать методы и тому подобное, поэтому, если вы можете, или у вас уже есть, я был бы признателен за вклад.

Первый метод (который я использую) заключается в назначении png-ресурса дескриптора как Drawable.затем каждый раз, когда я хочу нарисовать объект, который я вызываю:

Drawable.setBounds(x,y,x,y);
Drawable.draw(canvas);

Мой вопрос заключается в том, будет ли быстрее (в конструкторе) декодировать ресурс как BitMap, а затем масштабировать его до соответствующегоразмер.Затем в каждом цикле Рисуйте ресурс с помощью:

canvas.drawBitmap(DrawableName, 0, 0, null);

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

1 Ответ

1 голос
/ 28 ноября 2011

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

Bitmap myBitmap = BitmapFactory.decodeFile(myFile.getPath());
myBitmap = myBitmap.createScaledBitmap(myBitmap, width, height, true);

Документация для разработчиков Android по вышеуказанной функции

Вычисление и рисование примитивов во время выполнения требует вычислений и при рисовании многие из них будутснижайте производительность, поэтому используйте больше растровых изображений там, где это возможно - но будьте осторожны с преждевременной оптимизацией - нет смысла создавать множество растровых изображений, если в этом нет необходимости, поскольку не будет существенного (то есть заметного) увеличения производительности.

...