我是一个相当“新手”的Android开发人员,我希望我的第一个项目之一是一个动态壁纸,但是我是否应该专注于Canvas或OpenGL来解决它。作为新手,我知道我应该首先掌握Canvas,因为它更容易使用,但我更喜欢从我感兴趣的现实世界项目中学习,即使它有时有点倒退。
我之前以非常基本的方式使用过这两种方式,我理解他们的一般概念,但我不确定他们如何转移到动态壁纸的领域。我认为在动态壁纸上不需要OpenGL的全速运行,因为以最大FPS运行它会比电池耗尽更多,但与此同时我担心使用Canvas会导致滞后和在做更换主屏幕等事情时会口吃。
我一直倾向于使用OpenGL ES 2.0,以保持性能最佳,因为我对壁纸的初步想法涉及很多分层,我不确定Canvas是否有能力,但我想要一个更有经验的开发人员关于使用OpenGL所涉及的所有额外工作(特别是关于动态壁纸,从我所阅读的内容)是否值得的意见。
答案 0 :(得分: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
答案 1 :(得分:6)
我最终在项目的中途使用OpenGL,画布绘图被证明对我想要达到的目标来说太慢了。使用OpenGL引起了巨大的性能提升。不幸的是我不得不重构我的代码,所以我建议从一开始就使用OpenGL。 OpenGL支持脏渲染以及wallpaperservice的结构不依赖于渲染事物的方式,因此您仍然可以创建不会耗尽电池的壁纸。实际上,一个编程良好的壁纸在隐藏时不会呈现。随着Android附带的壁纸不遵循这种模式,现在的动态壁纸有一个坏名称是电池吸盘。真是个耻辱..