Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)

作者 : admin 本文共3457个字,预计阅读时间需要9分钟 发布时间: 2024-06-6 共1人阅读

文章目录

  • Android开机动画压缩包zip,自制开机动画
    • 1.Android加载压缩包原理
    • 2.自制开机动画

Android开机动画压缩包zip,自制开机动画

1.Android加载压缩包原理

这里有个md文件我们看下

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图

核心部分,

首先要创建一个文件叫做desc.txt,这是规定的,

## desc.txt format
The first line defines the general parameters of the animation:
//宽高,fps帧率
WIDTH HEIGHT FPS
* **WIDTH:** animation width (pixels)
* **HEIGHT:** animation height (pixels)
* **FPS:** frames per second, e.g. 60
It is followed by a number of rows of the form:
//TYPE 是一个字符 ,是一个格式,COUNT多少次要运行bootanimation PAUSE是否延迟暂停一帧,PATH 0-4
//TYPE COUNT PAUSE PATH这四个参数都要写上
TYPE COUNT PAUSE PATH [#RGBHEX [CLOCK1 [CLOCK2]]]
* **TYPE:** a single char indicating what type of animation segment this is:
//启动结束会被打断,
+ `p` -- this part will play unless interrupted by the end of the boot
//无论如何都不会被打断
+ `c` -- this part will play to completion, no matter what
//0代表直到开机boot完成为止
* **COUNT:** how many times to play the animation, or 0 to loop forever until boot is complete
* **PAUSE:** number of FRAMES to delay after this part ends
* **PATH:** directory in which to find the frames for this part (e.g. `part0`)
* **RGBHEX:** _(OPTIONAL)_ a background color, specified as `#RRGGBB`
//坐标参数clock
* **CLOCK1, CLOCK2:** _(OPTIONAL)_ the coordinates at which to draw the current time (for watches):
+ If only `CLOCK1` is provided it is the y-coordinate of the clock and the x-coordinate
defaults to `c`
+ If both `CLOCK1` and `CLOCK2` are provided then `CLOCK1` is the x-coordinate and `CLOCK2` is
the y-coodinate
+ Values can be either a positive integer, a negative integer, or `c`
- `c` -- will centre the text
- `n` -- will position the text n pixels from the start; left edge for x-axis, bottom edge
for y-axis
- `-n` -- will position the text n pixels from the end; right edge for x-axis, top edge
for y-axis
- Examples:
* `-24` or `c -24` will position the text 24 pixels from the top of the screen,
centred horizontally
* `16 c` will position the text 16 pixels from the left of the screen, centred
vertically
* `-32 32` will position the text such that the bottom right corner is 32 pixels above
and 32 pixels left of the edges of the screen
There is also a special TYPE, `$SYSTEM`, that loads `/system/media/bootanimation.zip`
and plays that.

图片路径part0,表示图片文件夹,里面都是一张张的图片文件

## zipfile paths
The system selects a boot animation zipfile from the following locations, in order:
/system/media/bootanimation-encrypted.zip (if getprop("vold.decrypt") = '1')
/system/media/bootanimation.zip
/oem/media/bootanimation.zip
## zipfile layout
The `bootanimation.zip` archive file includes:
desc.txt - a text file
part0  \
part1   \  directories full of PNG frames
...     /
partN  /

如果我们预制了zip的文件,那么代码就会走movie

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(1)

加载动画,解析zip里面的文件

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(2)

BootAnimation::Animation* BootAnimation::loadAnimation(const String8& fn)
{
if (mLoadedFiles.indexOf(fn) >= 0) {
SLOGE("File \"%s\" is already loaded. Cyclic ref is not allowed",
fn.string());
return nullptr;
}
ZipFileRO *zip = ZipFileRO::open(fn);
if (zip == nullptr) {
SLOGE("Failed to open animation zip \"%s\": %s",
fn.string(), strerror(errno));
return nullptr;
}
Animation *animation =  new Animation;
animation->fileName = fn;
animation->zip = zip;
animation->clockFont.map = nullptr;
mLoadedFiles.add(animation->fileName);
//解析desc.txt文件,
parseAnimationDesc(*animation);
if (!preloadZip(*animation)) {
return nullptr;
}
mLoadedFiles.remove(fn);
return animation;
}

读取描述文件

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(3)

这四个参数是必须要写的

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(4)

把文件夹的每一帧图片加载进来,

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(5)

然后就到一个关键方法,播放动画。

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(6)

他会去执行每一个part文件夹,一帧一帧的绘制图片纹理。

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(7)

2.自制开机动画

准备资源

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(8)

编写desc.txt文件规则

第一行是宽高,帧率fps

有多少个part文件夹就写多少行数,

c 无论如何都会执行完当前的这个part部分,保证动画的连续性,1 循环一次,只播放一次, 0 停留的帧数,

#ffee00代表颜色值,c c代表位置,横纵坐标,都是center居中。

1080 360 60
c 1 0 part0 #ffee00 c c
c 0 0 part1 #ffee00 c c
c 1 0 part2 #ffee00 c c
c 1 1 part3 #ffee00 c c
c 1 0 part4 #ffee00 c c

打包zip的压缩包

zip -r -X -Z store bootanimation part*/* desc.txt

执行命令

如下图

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(9)

预制到/system/media

把 bootanimation.zip 动画文件移动到 我们自定义的product 文件中。

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(10)

配置文件 test.mk中添加如下内容

PRODUCT_COPY_FILES += \
$(LOCAL_PATH)/bootanimation.zip:/system/media/bootanimation.zip
PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +=\ 
/system/media/bootanimation.zip

Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(11)

然后测试运行
Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)插图(12)

本站无任何商业行为
个人在线分享 » Android开机动画压缩包zip,自制开机动画(基于Android10.0.0-r41)
E-->