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

在这里插入图片描述

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

相关推荐

  1. Android10 动态修改开机动画(一)新增分区

    2024-06-06 09:08:01       9 阅读
  2. Android10 动态修改开机动画(二)设置分区权限

    2024-06-06 09:08:01       14 阅读
  3. Android10 动态修改开机动画(三)命令说明

    2024-06-06 09:08:01       8 阅读
  4. android密集架移动动画效果开发

    2024-06-06 09:08:01       29 阅读

最近更新

  1. js list to tree

    2024-06-06 09:08:01       0 阅读
  2. 02更新用户在线状态

    2024-06-06 09:08:01       0 阅读
  3. CSS魔法:link与@import的秘密较量

    2024-06-06 09:08:01       0 阅读
  4. 第12章:软件系统分析与设计

    2024-06-06 09:08:01       0 阅读
  5. Rust入门实战 编写Minecraft启动器#2建立资源模型

    2024-06-06 09:08:01       1 阅读
  6. three.js利用着色器实现波浪效果

    2024-06-06 09:08:01       1 阅读
  7. Python pdfplumber库:轻松解析PDF文件

    2024-06-06 09:08:01       1 阅读

热门阅读

  1. 基于openssl实现AES ECB加解密

    2024-06-06 09:08:01       9 阅读
  2. Shell 编程之正则表达式与文本处理器

    2024-06-06 09:08:01       9 阅读
  3. Linux之关机重启

    2024-06-06 09:08:01       8 阅读
  4. 【3d】Real-Time Rendering 3rd 笔记1:图形渲染管线

    2024-06-06 09:08:01       7 阅读
  5. C++的算法:Prim算法与Kruskal算法的原理与应用

    2024-06-06 09:08:01       10 阅读
  6. qt中qml调用cpp中的逻辑

    2024-06-06 09:08:01       8 阅读
  7. servlet

    2024-06-06 09:08:01       10 阅读
  8. Hive的安装与配置

    2024-06-06 09:08:01       9 阅读
  9. 「前端+鸿蒙」核心技术HTML5+CSS3(九)

    2024-06-06 09:08:01       9 阅读
  10. Verilog实现的数字钟

    2024-06-06 09:08:01       9 阅读