15

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

我以前以非常基本的方式使用过这两种方法,我理解它们的一般概念,但我不确定它们是如何转移到动态壁纸领域的。我认为动态壁纸不需要 OpenGL 的全速运行,因为以最大 FPS 运行它只会消耗过多的电池电量,但同时我担心使用 Canvas 会导致延迟和更改主屏幕等操作时出现口吃。

我一直倾向于使用 OpenGL ES 2.0,既要保持最佳性能,又因为我对壁纸的最初想法涉及很多分层,我不确定 Canvas 是否能够做到,但我希望有经验的开发人员对是否或者并非所有使用 OpenGL 所涉及的额外工作(尤其是与动态壁纸有关,据我所读)都是值得的。

4

2 回答 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 源代码以查看库存壁纸(例如 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 已经停止了他的项目,但如果你真的很感兴趣,你可以尝试从这里开始研究他的工作(Substrate):http ://code.google.com/p/moonblink/source/browse/wiki/Setup.wiki

于 2011-06-26T18:17:28.680 回答
6

我最终在项目进行到一半时使用了 OpenGL,事实证明画布绘制对于我想要实现的目标来说太慢了。使用 OpenGL 带来了巨大的性能提升。不幸的是,我不得不重构我的代码,所以我建议从一开始就使用 OpenGL。OpenGL 支持脏渲染,并且壁纸服务的结构不依赖于您渲染事物的方式,因此您仍然可以创建不会耗尽电池的壁纸。实际上,经过精心编程的壁纸在隐藏时不会呈现。由于 android 附带的壁纸不遵循这种模式,因此动态壁纸现在有了电池吸盘的坏名声。真是可惜了。。

于 2011-06-26T20:53:13.190 回答