Android动态壁纸 - OpenGL与Canvas

Sha*_*ock 15 android opengl-es live-wallpaper android-canvas

我是一个相当"新手"的Android开发人员,我希望我的第一个项目之一是一个动态壁纸,但是我是否应该关注Canvas或OpenGL是否存在冲突.作为新手,我知道我应该首先掌握Canvas,因为它更容易使用,但我更喜欢从我感兴趣的现实世界项目中学习,即使它有时有点倒退.

我之前以非常基本的方式使用过这两种方式,并且我理解它们的一般概念,但我不确定它们如何转移到动态壁纸的领域.我认为在动态壁纸上不需要OpenGL的全速运行,因为以最大FPS运行它会比电池耗尽更多,但与此同时我担心使用Canvas会导致滞后和在做更换主屏幕等事情时会口吃.

我一直倾向于使用OpenGL ES 2.0,以保持性能最佳,因为我对壁纸的初步想法涉及很多分层,我不确定Canvas是否有能力,但我希望更有经验的开发人员对是否有意见或者不是所有涉及使用OpenGL的额外工作(特别是与我看过的动态壁纸有关)是值得的.

Geo*_*man 9

如果你只是绘制到画布(例如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源代码,了解如何使用RenderScript实现股票壁纸(例如Grass,Galaxy).此链接可能有效,但无法保证:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/4.1.1_r1/com/android/wallpaper/(然后向下滚动到壁纸)

Moonblink已停止他的项目,但如果你真的很热衷,你可以尝试从这里开始研究他的工作(Substrate):http://code.google.com/p/moonblink/source/browse/wiki/Setup.wiki


Wil*_*Kru 6

我最终在项目的中途使用OpenGL,画布绘图被证明对我想要达到的目标来说太慢了.使用OpenGL引起了巨大的性能提升.不幸的是我不得不重构我的代码,所以我建议从一开始就使用OpenGL.OpenGL支持脏渲染以及wallpaperservice的结构不依赖于渲染事物的方式,因此您仍然可以创建不会耗尽电池的壁纸.实际上,一个编程良好的壁纸在隐藏时不会呈现.随着Android附带的壁纸不遵循这种模式,现在的动态壁纸有一个坏名称是电池吸盘.真是个耻辱..