bootanimation 的另一個開機動畫實現方法在 BootAnimation::movie()。
這邊是以播放圖片的方式,來呈現動畫效果。
使用這個方法的話,必須遵守它的規則。
1. 檔案 desc.txt
2. 目錄 part0/
desc.txt 是用來設定 bootanimation 如何去播放 part0/ 下的圖片,圖片必須使用PNG。
當然,你可以有 part1/, part2/, ..., partN/ 多個目錄,來存放你的動畫圖片。
bootanimation 在播放 part0/ 目錄裡面的圖檔,是依照檔案名稱的排序方式在播放,
所以檔案的命名最好是類似 xxx_001.png ~ xxx_nnn.png。
desc.txt 的內容大致上類似:
256 256 30
p 1 0 part0
p 0 0 part 1
...
第一行是表示:
width height fps
設定圖片寬高跟每秒要播放幾張。
第二行以後的:
p count pause path
count 代表要播放 count 次,0為無限。
pause 代表每播放完一個循環後,要進入下個循環之前,中間要不要停頓一下下。
path 代表目錄名稱,part0, part1, ...。
東西準備完備後,把這些東西壓縮成一個 bootanimation.zip 檔。
zip -0r bootanimation.zip desc.txt part0/
最後把這個檔案放到 /data/local/bootanimation.zip 就好了。
熱門文章
-
若是在Android 2.1,init.rc裡面應該有這幾行: service bootsound /system/bin/playmp3 user media group audio oneshot 這就是開機音效,可是你一定找不到playm...
-
若想在 Android 上開發或新增一套 Library,要怎麼做呢? 這套 Library 可能涵蓋 C/C++、JNI、Java 這幾個部份,可能是上層 Applications 必須使用到這個功能,或是 Framework 必須整合這個功能,甚至會跟硬體有關。 現在假...
-
之前有說過,Android 內建的 bootanimation 這隻程式可用兩種方式來呈現開機動畫。 其中一種方式是以兩張圖片來呈現掃光的效果。 你可以在 frameworks/base/core/res/assets/images 這個目錄下,找到 android-log...
11.24.2010
11.22.2010
[ Android ] 開機畫面 (3)
之前有說過,Android 內建的 bootanimation 這隻程式可用兩種方式來呈現開機動畫。
其中一種方式是以兩張圖片來呈現掃光的效果。
你可以在 frameworks/base/core/res/assets/images 這個目錄下,找到 android-logo-mask.png 和 android-logo-shine.png 這兩個檔案。
上圖 android-logo-mask.png 有著 android 鏤空字樣,就是透明、transparent。
下圖 android-logo-shine.png 就是一張有著不同顏色的圖。
若要自己設計這兩張圖,圖檔格式必須為 PNG,而且圖的寬高建議為2的冪次方
pixels。
為什麼會建議為2的冪次方?因為在某些機器上 OpenGL ES 會有無法顯示非2冪次方大小的圖的問題。
這個功能,我們可以在 frameworks/base/cmds/bootanimation/BootAnimation.cpp 中的 BootAnimation::android() 看到。
可以看到,這個 function 會將兩張圖置中並重疊在一起,然後慢慢移動底圖,也就是 android-logo-shine.png 這張圖,最後我們看到的效果就是 android 這幾個閃閃發光的字。
改完後,記得重新編譯 framework,"mm framework"。
然後把編出來的 framework-res.apk,替換掉原本在手機內的 /system/framework/framework-res.apk,就大功告成了。
其中一種方式是以兩張圖片來呈現掃光的效果。
你可以在 frameworks/base/core/res/assets/images 這個目錄下,找到 android-logo-mask.png 和 android-logo-shine.png 這兩個檔案。
上圖 android-logo-mask.png 有著 android 鏤空字樣,就是透明、transparent。
下圖 android-logo-shine.png 就是一張有著不同顏色的圖。
若要自己設計這兩張圖,圖檔格式必須為 PNG,而且圖的寬高建議為2的冪次方
pixels。
為什麼會建議為2的冪次方?因為在某些機器上 OpenGL ES 會有無法顯示非2冪次方大小的圖的問題。
這個功能,我們可以在 frameworks/base/cmds/bootanimation/BootAnimation.cpp 中的 BootAnimation::android() 看到。
可以看到,這個 function 會將兩張圖置中並重疊在一起,然後慢慢移動底圖,也就是 android-logo-shine.png 這張圖,最後我們看到的效果就是 android 這幾個閃閃發光的字。
改完後,記得重新編譯 framework,"mm framework"。
然後把編出來的 framework-res.apk,替換掉原本在手機內的 /system/framework/framework-res.apk,就大功告成了。
11.17.2010
[ Android ] 開機畫面 (2)
如何製作 initlogo.rle ?
1. 先準備一張與目標板上LCD解析度相符的圖,例如:480x800,格式為JPEG或PNG。
2. 確認Linux系統中有安裝imagemagick這個套件,因為需要用到'convert'這個指令來轉換圖片格式。沒有的話請用apt-get或yum安裝。
3. 假設圖片名稱為:initlogo.png。
$convert initlogo.png rgb:intlogo.rgb
4. 在Android source code的目錄下,可以找到'rgb2565'這隻程式(out/host/linux-x86/bin/rgb2565)。
$rgb2565 -rle < intlogo.rgb > initlogo.rle
5. 最後把 initlogo.rle 加到 ramdisk 裡面就好了。
1. 先準備一張與目標板上LCD解析度相符的圖,例如:480x800,格式為JPEG或PNG。
2. 確認Linux系統中有安裝imagemagick這個套件,因為需要用到'convert'這個指令來轉換圖片格式。沒有的話請用apt-get或yum安裝。
3. 假設圖片名稱為:initlogo.png。
$convert initlogo.png rgb:intlogo.rgb
4. 在Android source code的目錄下,可以找到'rgb2565'這隻程式(out/host/linux-x86/bin/rgb2565)。
$rgb2565 -rle < intlogo.rgb > initlogo.rle
5. 最後把 initlogo.rle 加到 ramdisk 裡面就好了。
11.13.2010
[ Android ] 開機音效 (1)
若是在Android 2.1,init.rc裡面應該有這幾行:
service bootsound /system/bin/playmp3
user media
group audio
oneshot
這就是開機音效,可是你一定找不到playmp3這隻程式。
但Android裡面的確已經有現成可用的程式了,只不過它不叫playmp3,它叫sound。
source code在"android_source/system/extras/sound/"。
只要將上述的playmp3更名為sound,並將一隻WAV音訊檔複製到手機或開發板上的"/data/out.wav"即可。
Android 2.2的話,上述幾行可能要自己加。
service bootsound /system/bin/playmp3
user media
group audio
oneshot
這就是開機音效,可是你一定找不到playmp3這隻程式。
但Android裡面的確已經有現成可用的程式了,只不過它不叫playmp3,它叫sound。
source code在"android_source/system/extras/sound/"。
只要將上述的playmp3更名為sound,並將一隻WAV音訊檔複製到手機或開發板上的"/data/out.wav"即可。
Android 2.2的話,上述幾行可能要自己加。
[ Android ] 開機畫面 (1)
就我所知,Android開機畫面可分為幾個階段來實作:
1. Boot Loader
2. FrameBuffer Driver
3. init
4. bootanimation
若要開機畫面在使用者按下Power Button後的第一時間就顯示,Boot Loader必須先把畫面輸出到LCD上。
當Boot Loader帶起Linux Kernel後,FrameBuffer Driver initialize hardware時,可再輸出一張畫面。
當kernel結束後,會去執行"/init"。Android就是在這邊將"/initlogo.rle"這張圖輸出到LCD上。
在Android上,"/init"會去讀取"/init.rc"。如果仔細看看init.rc的話,應該會發現有這麼一行:service bootanim /system/bin/bootanimation。沒錯!這時候就會執行bootanimation這隻程式。
bootanimation有兩種方式來呈現開機動畫。
其一,確認系統中是否存在"/data/local/bootanimation.zip"這個檔案,以播放圖片方式來產生動畫效果。
其二,若不存在前述檔案,則使用系統中的"android-logo-mask.png"和"android-logo-shine.png"來產生文字掃光的動畫效果。這兩個檔案在"android_source/frameworks/base/core/res/assets/images/"。
當然,你可以使用這兩種方式,改改圖片來達成你想要得效果,或者自己重寫一隻更炫的bootanimation。
上述的方法,若要達到seamless的話,還會有一些技術上的細節。
開機畫面這種東西,其實是在開機時間長的機器上才有其必要,為了不要讓user一直盯著黑畫面,還以為手機壞掉。
若開機時間只要一秒,開機畫面其實是多餘的。
1. Boot Loader
2. FrameBuffer Driver
3. init
4. bootanimation
若要開機畫面在使用者按下Power Button後的第一時間就顯示,Boot Loader必須先把畫面輸出到LCD上。
當Boot Loader帶起Linux Kernel後,FrameBuffer Driver initialize hardware時,可再輸出一張畫面。
當kernel結束後,會去執行"/init"。Android就是在這邊將"/initlogo.rle"這張圖輸出到LCD上。
在Android上,"/init"會去讀取"/init.rc"。如果仔細看看init.rc的話,應該會發現有這麼一行:service bootanim /system/bin/bootanimation。沒錯!這時候就會執行bootanimation這隻程式。
bootanimation有兩種方式來呈現開機動畫。
其一,確認系統中是否存在"/data/local/bootanimation.zip"這個檔案,以播放圖片方式來產生動畫效果。
其二,若不存在前述檔案,則使用系統中的"android-logo-mask.png"和"android-logo-shine.png"來產生文字掃光的動畫效果。這兩個檔案在"android_source/frameworks/base/core/res/assets/images/"。
當然,你可以使用這兩種方式,改改圖片來達成你想要得效果,或者自己重寫一隻更炫的bootanimation。
上述的方法,若要達到seamless的話,還會有一些技術上的細節。
開機畫面這種東西,其實是在開機時間長的機器上才有其必要,為了不要讓user一直盯著黑畫面,還以為手機壞掉。
若開機時間只要一秒,開機畫面其實是多餘的。
訂閱:
意見 (Atom)
