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

文章目录

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

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

1.Android加载压缩包原理

这里有个md文件我们看下

在这里插入图片描述

核心部分,

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

## desc.txt formatThe 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. 60It 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-coordinatedefaults to `c`+ If both `CLOCK1` and `CLOCK2` are provided then `CLOCK1` is the x-coordinate and `CLOCK2` isthe 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 edgefor y-axis- `-n` -- will position the text n pixels from the end; right edge for x-axis, top edgefor 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, centredvertically* `-32 32` will position the text such that the bottom right corner is 32 pixels aboveand 32 pixels left of the edges of the screenThere is also a special TYPE, `$SYSTEM`, that loads `/system/media/bootanimation.zip`
and plays that.

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

## zipfile pathsThe 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 layoutThe `bootanimation.zip` archive file includes:desc.txt - a text filepart0  \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.zipPRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST +=\ /system/media/bootanimation.zip

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SystemUI中添加系统新图标

文章目录 描述实现步骤framework中修改SystemUI中修改 描述 在系统状态栏的右侧添加一个自定义图标 实现步骤 framework中修改 1.定义右侧系统图标的插槽 frameworks/base/core/res/res/values/config.xml文件中内容修改如下所示,定义的图标为status_bar_custom…

【AI】你要的U-KAN来了

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 U-KAN来了,快是真的快的,上个月才出的KAN,不得不说快。 先占个坑,有时间细看。 下面放上摘要 1. 正文 …

使用Python的xml.etree.ElementTree模块解析XML文件

使用Python的xml.etree.ElementTree模块解析XML文件 在Python中,处理XML文件是一项常见的任务。XML(可扩展标记语言)是一种用于编码文档的标记语言,它提供了一种结构化的方式来描述和传输数据。对于处理XML文件,Python标准库提供了xml.etree.ElementTree(通常简称为ET)模…

Linux中的`paste`命令:合并文件的简单艺术

Linux中的paste命令:合并文件的简单艺术 在Linux的世界中,文本处理是一项常见的任务。有时,我们可能需要将两个或多个文件的内容合并在一起,以创建新的输出。这就是paste命令的用武之地。paste命令允许你按行合并文件的内容&…

网络编程介绍(IP)(一)

定义:可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。 java.net.*包下提供了网络编程的解决方案。 基本的通信架构: CS架构( Client客户端/Server服务端 ): Clie…

Django 外键关联数据

在设计数据库的时候,是得需要通过外键的形式将各个表进行连接。 原先的表是这样的 要想更改成这样: 下面是操作步骤: 有两张表是关联的 # 在 models.py 里创建class Department(models.Model):"""部门表""&quo…

基于Arduino的简易磁悬浮装置原理图和源代码分享

磁悬浮装置原理 大家可能都玩过这种磁悬浮玩具,它们的工作原理与此类似。 首先,让我们了解一下这个原理,其实非常简单。它主要依赖于磁力对悬浮物体的控制。基本原理如下:在浮子的正下方放置一个霍尔传感器。当传感器检测到浮子向…

Android Compose 十:常用组件列表 监听

1 去掉超出滑动区域时的拖拽的阴影 即 overScrollMode 代码如下 CompositionLocalProvider(LocalOverscrollConfiguration provides null) {LazyColumn() {items(list, key {list.indexOf(it)}){Row(Modifier.animateItemPlacement(tween(durationMillis 250))) {Text(text…

七天进阶elasticsearch[one]

elasticSearch 概述 Elasticsearch是一个近实时的搜索平台。这意味着,从索引一个文档直到这个文档能够被搜索到有一个很小的延迟(通常是一秒) 集群 一个集群就是由一个或多个节点组织在一起, 它们共同持有你全部的数据&#x…

【第8章】SpringBoot实战篇之文章分类(上)

文章目录 前言一、后端代码1. CategoryController2. service3. CategoryMapper4. Category 二、测试1. 失败(校验)2.正常 总结 前言 从这开始进入文章相关的接口开发,本章主要介绍定义文章分类接口和新增文章分类 建表语句和测试用例,在SpringBoot专栏首…

pyspark中使用mysql jdbc报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决

报错信息: py4j.protocol.Py4JJavaError: An error occurred while calling o33.load. : java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 我的解决方法: 这个报错就是提示你找不到jar包,所以你需要去下载一个和你mysql版本匹配的j…

智慧园区智能化系统整体解决方案(111页PPT)

方案介绍: 智慧园区智能化系统整体解决方案是一个综合性的管理平台,它通过集成视频、报警、园区一卡通、产线管理、能耗管理、公共广播、信息发布等多种系统,实现园区的全方位智能化管理。该系统以基础管理平台为系统基础,提供系…

实验五、IPv4地址的子网划分,第1部分《计算机网络》

但凡你有点本事,也不至于一点本事都没有。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 完成本练习之后,您应该能够确定给定 IP 地址和网络掩码 的网络信息。本练习旨在让您掌握如何根据给定 IP 地址计算网络 IP 地址信息。 二、实验…

Python怎么把数据从CSV文件导入到MySQL数据库?

Python怎么把数据从CSV文件导入到MySQL数据库? 在数据处理和存储的过程中,我们经常需要将数据从CSV文件导入到MySQL数据库中。Python作为一种强大的编程语言,提供了多种工具和库来帮助我们完成这项任务。然而,对于初学者来说&…

【AI】DeepStream(09):deepstream-app源码详解

【AI】AI学习目录汇总 上一篇【AI】DeepStream(08):deepstream-app-示例演示 1、命令行参数解析 1)定义命令行参数 两个重要的命令行参数,-c 和 -i 分别用于指定配置文件和输入的url GOptionEntry entries[] = {{"version", v, 0

VBA发送邮件的常用方法?VBA如何自动发信?

VBA发送邮件需要配置什么设置?怎么使用VBA发送邮件? 使用VBA自动化处理任务是非常常见的,尤其是在发送邮件方面。通过VBA发送邮件,不仅可以提高工作效率,还能减少人为操作的错误。AokSend将详细介绍VBA发送邮件的常用…

MBR10100FCT-ASEMI肖特基二极管MBR10100FCT

编辑:ll MBR10100FCT-ASEMI肖特基二极管MBR10100FCT 型号:MBR10100FCT 品牌:ASEMI 封装:TO-220F 最大平均正向电流(IF):10A 最大循环峰值反向电压(VRRM)&#xff1…

新风口还是割韭菜?全域外卖加盟究竟真是假?

随着全域外卖加盟模式的兴起,与之相关的骗局不断增多,并由此引发了外界对于全域外卖加盟模式真实性的质疑,全域外卖加盟是真的吗等相关问题更是一举成为全域外卖交流群中的热点话题。 事实上,就目前的情况而言,全域外卖…

数据资产运营平台解决方案

一、前言 数据资产管理运营平台是涵盖数据资产确权、登记、核验、质量评价、价值评估、定价、增值、入表、安全等全流程业务的数据要素市场基础设施。落实数据产业制度供给,构建数据要素市场,汇集数据资源供给服务,为数据要素流通交易提供平…

BERT应用——文本相似度计算

本文展示了如何利用BERT模型计算两个文本字符串之间的余弦相似度。BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的预训练模型,广泛应用于自然语言处理领域。BERT的核心创新在于其双向训练的机制…