2011-06-26 77 views
15

我是一個相當「新手」的Android開發人員,我希望我的第一個項目之一是一個動態壁紙,但是我對是否應該專注於Canvas或OpenGL爲了它。對於這個新手我知道我應該首先掌握Canvas,因爲它更易於使用,但我更願意從我感興趣的真實世界項目中學習,即使它有時候會稍微向後一點。Android動態壁紙 - OpenGL vs Canvas

我以前用過非常基本的方法,我也瞭解它們的一般概念,但我不確定它們是如何轉移到動態壁紙的領域的。我認爲,在動態壁紙上不需要OpenGL的全速播放,因爲在最大FPS下運行它會使電池超出必要的電量,但同時我擔心使用Canvas會導致延遲在做更改主屏幕等操作時會出現口吃。

我一直傾向於使用OpenGL ES 2.0,以保持性能最佳,因爲我最初的壁紙想法涉及很多分層,我不確定Canvas是否有能力,但我想要一個更有經驗的開發人員對於使用OpenGL所涉及的所有額外工作(尤其是與我所閱讀的動態壁紙有關)的意見是值得的。

回答

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實現。此鏈接可能工作,但不保證: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

+0

最後兩個鏈接似乎打破了,因爲我越來越404 –

+0

@OmarRehman對不起。鏈接是有問題的。 –

6

我在項目的中途結束時使用了OpenGL,畫布繪圖對於我試圖實現的東西來說太慢了。使用OpenGL帶來了巨大的性能提升。不幸的是我不得不重構我的代碼,所以我會從一開始就推薦使用OpenGL。髒渲染由OpenGL支持,而且,牆紙服務的結構不依賴於渲染事物的方式,因此您仍然可以創建不耗盡電池的牆紙。實際上,一個編程良好的壁紙在隱藏時不會渲染。由於Android附帶的壁紙並不遵循這種模式,因此動態壁紙現在被稱爲電池吸盤。真是一個恥辱..