当前位置: 首页 > news >正文

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

在这里插入图片描述

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

相关文章:

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

文章目录 Android开机动画压缩包zip,自制开机动画1.Android加载压缩包原理2.自制开机动画 Android开机动画压缩包zip,自制开机动画 1.Android加载压缩包原理 这里有个md文件我们看下 核心部分, 首先要创建一个文件叫做desc.txt,这是规定的…...

手机站怎么推广

随着手机的普及和移动互联网的快速发展,越来越多的人开始使用手机进行在线购物、社交娱乐、阅读资讯等,同时也催生了越来越多的手机站的出现。但是,在海量的手机站中,要让自己的手机站脱颖而出,吸引更多用户访问和使用…...

Mysql疑难报错排查 - Field ‘XXX‘ doesn‘t have a default value

项目场景: 数据库环境 :mysql8; 工程使用:MyBatisPlus 表情况: 问题描述 某一个插入语句使用了 MyBatisPlus 的 save 方法,因为end_time1 end_time2都并没有值,所以在MyBatisPlus默认情况下,…...

YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]

YOLOv8_obb的预测流程,主要分预处理模块、推理模块和后处理模块。这里面有很多内容是和目标检测预测流程是重合的,主要区别在于Angle分支、NMS后处理以及regularize_rboxes部分。本文也主要介绍一下这三个模块,其他模块可以结合YOLOv8预测流程-原理解析[目标检测理论篇]一起…...

02JAVA字符串和集合

1.字符串 1.String 介绍: String在java.lang包下,使用不需要导包,String代表字符串,带""字符串都是String类的对象 字符串的特点: 字符串不可变,他们的值在创建后不能被改变 字符串效果相当于(char[]),底层原理是字节数组(byte[]) String构造方法: String 变量名 ne…...

Qt如何让按钮的菜单出现在按钮的右侧

直接上代码,我们用到了一个eventfilter的函数功能。这个函数比较厉害和重要,大家务必经常拿出来看看。 void MainWindow::initMenu() { QMenu* menuLiXiang new QMenu; QAction* actXiangMuZhangCheng new QAction("项目章程"); …...

C++的类和new和delete和菱形继承机制

文章目录 参考虚函数使用虚函数的class结构相关实现源码IDA反编译子类虚表和父类虚表调用函数菱形继承 参考 https://showlinkroom.me/2017/08/21/C-%E9%80%86%E5%90%91%E5%88%86%E6%9E%90/ https://www.cnblogs.com/bonelee/p/17299985.html https://xz.aliyun.com/t/5242?t…...

Redis教程(二十二):Redis的过期删除和缓存淘汰策略

传送门:Redis教程汇总篇,让你从入门到精通 一、过期删除策略 Redis 中的过期删除策略是与 Redis 管理键的生命周期相关的一系列操作,用于删除过期的Key以释放内存。Redis 提供了三种主要的过期删除策略: 1、惰性删除(Lazy Expiration) 工作原理:当客户端尝试访问一个…...

Lodop 实现局域网打印

文章目录 前言一、Lodop支持打印的方式lodop 打印方式一般有3种:本地打印局域网集中打印广域网AO打印 二、集成步骤查看lodop 插件的服务端口:查看ip后端提供接口返回ip,前端动态获取最后步骤 前言 有时候会根据不同的ip来获取资源文件&…...

HarmonyOS(二十四)——Harmonyos通用事件之触摸事件

1.触摸事件。 触摸事件是HarmonyOS通用事件的一种事件之一,当手指在组件上按下、滑动、抬起时触发。 名称是否冒泡功能描述onTouch(event: (event?: TouchEvent) > void)是手指触摸动作触发该回调,event返回值见下面TouchEvent介绍。 2. TouchEve…...

2024-前端面试的正确打开方式(GitHub火爆场景题剖析)

写在前面 最近前端面试大家有没有感觉到场景题的压迫感!!! 很显然普通面试八股不会怎么更新,而且就前端来说,面试并不是真正困难的,常规八股显示不出面试者的技术水平。 前端作为一个技术行业&#xff0c…...

Vue3项目炫酷实战,检测密码强度值

在前端项目开发中,确保用户密码的强度是保护账户安全的重要措施。本文将演示如何使用Vue 3实现一个简单的密码强度检测功能。通过实时反馈,帮助用户创建更安全的密码,从而提升整体系统的安全性。无论您是前端开发新手还是经验丰富的开发者&am…...

PHP实现抖音小程序用户登录获取openid

目录 第一步、抖音小程序前端使用tt.login获取code 第二步、前端拿到code传给后端 第三步、方法1 后端获取用户信息 第四步、方法2 抖音小程序拿到用户信息把用户信息传给后端 code2Session抖音小程序用户登录后端文档 第一步、抖音小程序前端使用tt.login获取code 前端 …...

Linux进程无法被kill

说明:记录一次应用进程无法被kill的错误; 场景 在一次导出MySQL数据时,使用下面的命令,将数据库数据导出为.sql文件,数据量大,导出时间长,于是我就将服务器重启了。 mysqldump -u username -…...

MySQL binlog三种模式

1.statement statement 记录的是sql语句。比如一条sql,update table_user set age 20 where id between 1 and 100。这条sql会更新100条数据,但是statement 模式下只会记录这条sql语句。 优点:不需要记录数据的变化,减少了bin …...

【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南

【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南 大家好 我是寸铁👊 总结了一篇【CentOS 7】挑战探索:在CentOS 7上实现Python 3.9的完美部署指南详细步骤✨ 喜欢的小伙伴可以点点关注 💝 前言 此篇教程只适用于p…...

oracle删除表空间和用户命令

创建表空间和用户可参考 ORACLE创建表空间,用户,修改密码,分配权限,以及导入导出_oracle表空间的密码-CSDN博客 1.删除表空间 --删除空的表空间,但是不包含物理文件 drop tablespace tablespace_name; --删除非空表空间,但是不包含物理文件 drop tabl…...

企业微信hook接口协议,ipad协议http,获取未发送群发列表

获取未发送群发列表 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"1753cdff-0501-42fe-bb5a-2a4b9629f7fb" } 返回示例 {"data": {"listdata": [{"now_cnt&qu…...

oracle中的INTERVAL函数学习总结

Oracle 从9i数据库开始引入了一种新特性,可以用来存储时间间隔,出现了INTERVAL 函数。这个函数的表达式比较多,初学比较费劲不好掌握,经过以几个小时的查阅资料和实验,总结如下: interval year t…...

爬虫(没)入门:用 node-crawler 爬取 blog

起因 前几天想给一个项目加 eslint,记得自己曾经在博客里写过相关内容,所以来搜索。但是发现 csdn 的只能按标题,没办法搜正文,所以我没搜到自己想要的内容。 没办法只能自己又重新折腾了一通 eslint,很烦躁。迁怒于…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如&#xff1a…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Bean 作用域有哪些?如何答出技术深度?

导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答&#xff0c…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...