原始 & 自定義android開機動畫

android開機動畫顯示原理:
開機時,系統自動檢測在/system/media/目錄或/data/local/目錄有沒有bootanimation.zip文件。如果有,這按照bootanimation.zip裏面的png排列順序依次顯示開機圖片,開起來就是動畫效果;否則按照android默認的方式顯示開機動畫:frameworks/base/core/res/assets/images



android開機動畫叫源碼位於frameworks/base/cmds/bootanimation下,這個程序編譯後生成/syetem/bin/bootanimation,將/data/local/bootanimation.zip或/system/media/bootanimation.zip裏面的png圖片以動畫的形式播放出來。

先來分析一下源碼:

frameworks/base/cmds/bootanimation/BootAnimation.cpp

首先看一下定義的常量:

  1. #define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"  
  2. #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"  
  3. #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"  


 

BootAnimation::readyToRun()

進入一個if判斷語句

  1. if ((encryptedAnimation &&  
  2.             (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0) &&  
  3.             (mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) == NO_ERROR)) ||  
  4.             ((access(USER_BOOTANIMATION_FILE, R_OK) == 0) &&  
  5.             (mZip.open(USER_BOOTANIMATION_FILE) == NO_ERROR)) ||  
  6.             ((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&  
  7.             (mZip.open(SYSTEM_BOOTANIMATION_FILE) == NO_ERROR))) {  
  8.         mAndroidAnimation = false;  
  9.     }  


 

BootAnimation::threadLoop()

  1. if (mAndroidAnimation) {  
  2. r = Android(); // 執行android字體閃動的圖片  
  3. else {  
  4. r = movie(); // 執行bootanimation.zip中提供的動畫圖片  
  5. }  


 

 
 BootAnimation::Android()會加載"images/android-logo-mask.png"和"images/android-logo-shine.png"
 BootAnimation::movie()會加載bootanimation.zip中的內容

我們下載的源碼裏默認是沒有那些個.zip動畫的,所以總會跳到android字體閃動的畫面。

知道原理之後,自定義開機畫面就簡單了,我們直接在/system/media/目錄或是在/data/local/目錄加上bootanimation.zip文件就可以了。

bootanimation.zip文件由下面幾個文件目錄組成:
desc.txt         動畫屬性描述文件
part0             第一階段動畫圖片的目錄 (動畫是由一幀幀圖片組成的)
part1             第二階段動畫圖片的目錄
...
partn           

一般來說就兩個文件夾part0、part1,兩個文件夾裏面放着編號號的png圖片。

desc.txt文件內容格式如下:
320 480 5
p 1 0 part0
p 0 0 part1

解釋下:
320爲圖片的寬,480爲圖片的高,後面的那個5表示幀數,即每秒播放的圖片張數。
p爲描述符,後面的1表示播放一次,後面的0表示階段切換時間,part0表示png資源路徑。
p爲描述符,後面的0表示本階段無限循環(直到開機結束),再後面的0表示本階段切換時間,part1表示路徑。

自己生成bootanimation.zip時,只要編輯好desc文檔,再把相應的png圖片資源放到各自的文件夾即可,準備好這些直接壓縮生成bootanimation.zip文件(注意不要壓縮文件,直接選擇存儲方式壓縮,要不然不能正確獲取到png圖片,開機時會一直黑屏),然後把.zip文件用adb push到/system/media或是/data/local目錄,重啓,這是應該就會顯示自定義的開機動畫了。

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