Android Live Wallpapers - OpenGL vs Canvas

Я довольно Android-разработчик "newb", и я бы хотел, чтобы один из моих первых проектов был живым обоями, однако я не согласен с тем, должен ли я фокусироваться на Canvas или OpenGL для него. Будучи новичком в этом, я знаю, что сначала я должен овладеть Canvas, так как это проще в использовании, но я предпочитаю учиться на проектах реального мира, в которых я заинтересован, даже если это немного назад в разы.

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

Я склоняюсь к использованию OpenGL ES 2.0, как для обеспечения оптимальной производительности, так и из-за того, что мои первоначальные идеи для обоев связаны с большим количеством слоев, что я не уверен, что Canvas способен, но мне бы хотелось, чтобы более опытные разработчики мнение о том, стоит ли вся дополнительная работа по использованию OpenGL (особенно в отношении живых обоев, из того, что я прочитал).

Ответы

Ответ 1

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

Если вы хотите использовать OpenGL, вам нужно будет использовать дополнительный пакет, такой как GLWallpaperService, AndEngine или RenderScript.

http://www.rbgrn.net/content/354-glsurfaceview-adapted-3d-live-wallpapers

http://www.andengine.org/forums/tutorials/live-wallpaper-template-t258.html

Просмотрите исходный код Android, чтобы увидеть, как фондовые обои (например, Grass, Galaxy) реализованы с использованием RenderScript. Эта ссылка может работать, но никаких гарантий: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.1.1_r1/com/android/wallpaper/ (затем прокрутите вниз до обоев)

Moonblink прекратил свой проект, но если вы действительно заинтересованы, вы можете попробовать исследовать его работу (субстрат), начиная здесь: http://code.google.com/p/moonblink/source/browse/wiki/Setup.wiki

Ответ 2

Я закончил использование OpenGL на полпути проекта, рисование холста оказалось слишком медленным для того, чего я пытался достичь. Использование OpenGL привело к значительному увеличению производительности. К сожалению, мне пришлось реорганизовать мой код, поэтому я бы рекомендовал использовать OpenGL с самого начала. Грязная рендеринга поддерживается OpenGL, а структура обоев не зависит от способа рендеринга, поэтому вы все равно сможете создать обои, которые не разряжают батарею. На самом деле хорошо запрограммированные обои не отображаются, когда они скрыты. Поскольку обои, загруженные с андроидом, не следуют этому шаблону, живые обои теперь имеют плохое имя того, что они являются присосками для аккумуляторов. Действительно стыдно..