Android动态壁纸--OpenGL vs Canvas

16

我是一名相当“新手”的Android开发人员,我希望我的第一个项目之一是一个动态壁纸,但我对于是应该专注于使用Canvas还是OpenGL感到矛盾。作为一个新手,我知道应该先掌握Canvas,因为它更易于使用,但我更喜欢从我有兴趣的实际项目中学习,即使有时候有点反向。

我以非常基本的方式都使用过这两个工具,并且我了解它们的一般概念,但我不确定它们如何转移到动态壁纸领域。我认为在动态壁纸上不需要OpenGL的完全速度,因为以最大FPS运行它将比必要的更耗费电池电量,但同时我担心使用Canvas会在更改主屏幕等操作时导致延迟和卡顿。

我一直倾向于使用OpenGL ES 2.0,既可以保持性能最优,也因为我对于壁纸的初始想法涉及许多图层,我不确定Canvas是否有能力实现。但我想听听更有经验的开发人员对于在动态壁纸中使用OpenGL(尤其是从我所读到的资料来看)所涉及的所有额外工作是否值得的看法。

2个回答

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

最后两个链接现在似乎已经失效了,因为我收到了404错误。 - Omar Rehman

6

在项目进行到一半时,我发现使用画布绘制对于我想要实现的目标来说速度太慢了,因此我最终选择了使用OpenGL。使用OpenGL可以大幅提高性能。不幸的是,我不得不重构我的代码,因此我建议从一开始就使用OpenGL。OpenGL支持脏渲染,而且壁纸服务的结构并不依赖于你渲染的方式,因此你仍然可以创建一个不会耗尽电池的壁纸。实际上,一个良好编程的壁纸在隐藏时不会渲染。由于Android自带的壁纸没有遵循这种模式,动态壁纸现在有了被认为是耗电怪兽的坏名声。真是太遗憾了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接