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

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

1.Android加载压缩包原理

这里有个md文件我们看下

在这里插入图片描述

核心部分,

首先要创建一个文件叫做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

在这里插入图片描述

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

在这里插入图片描述

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;
}

读取描述文件

在这里插入图片描述

这四个参数是必须要写的

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

2.自制开机动画

准备资源

在这里插入图片描述

编写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

执行命令

如下图

在这里插入图片描述

预制到/system/media

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

在这里插入图片描述

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

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

PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +=\ 
    /system/media/bootanimation.zip

在这里插入图片描述

然后测试运行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值