Android水面落葉動態壁紙源碼及分析 附下載地址

 

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章