Android自帶的水面落葉動態壁紙效果,嘗試使用plasma等jni來實現,最終效果仍然不如renderScript實現的好,因爲renderScript相關學習資料比較少,不再重頭編寫rs腳本來實現波紋效果,而是提取源碼中的動態壁紙腳本來使用。
水面波紋動態壁紙在安卓源碼中的位置是:
\android\packages\wallpapers\Basic\src\com\android\wallpaper\fall
要提取的主要對象就是這個文件夾下的fall.rs文件
將源碼導入,刪除galaxy等不需要的壁紙效果後,發現編譯只報一個錯誤,MathUtil找不到,查看其導入聲明:
因爲是靜態導入,可以考慮直接把這個方法移植過來,該引用的類是個隱藏類,源碼文件在:
\android\frameworks\base\core\java\android\util\MathUtils.java
查看下方法定義:
public static float random(float howsmall, float howbig) { if (howsmall >= howbig) return howsmall; return sRandom.nextFloat() * (howbig - howsmall) + howsmall; }
其中sRandom=new Random();
於是在FallRs添加一下方法替代之:
public static float random(float howsmall, float howbig) { if (howsmall >= howbig) return howsmall; return new Random().nextFloat() * (howbig - howsmall) + howsmall; }
由於一些機型已經安裝了水面落葉的動態壁紙,再次安裝同樣的包名會導致簽名不一致導致無法安裝,所以修改了下包名wallpaper改爲wallpapers,至此水面落葉壁紙就可以運行了。
程序使用renderScript作爲渲染工具,關於renderScript這裏有幾篇文章進行簡單的介紹。
在附上的源碼內部添加了一些註釋,renderScript入門後再看這些應該問題不大。
然後修改一下背景圖片,刪除葉子的下落效果,再修改下水面波紋的觸發條件等,都可以簡單的完成了
下載地址:[email protected]:gediseer/wallpapers.git