安卓开机动画

目录

  • 一、开机动画的2种模式
    • 1.1 android模式
    • 2.2 movie模式
  • 二、开机动画代码运行位置
  • 三、删除开机动画
  • 四、自定义开机动画实践


一、开机动画的2种模式

一种是使用两张图片利用某种效果来造成动态,另一种则是用一个图包循环显示的方式来形成动态。当然,这时因为mediaplayer已经起来,播放开机动画的时候可以同时播放开机音乐。

第一种双图片模式称为android模式
第二种图包模式称为movie模式
他们在循环时通过条件变量来选择其一:

if (mAndroidAnimation) {

r = android(); //Android原生的经典开机动画

} else {

r = movie(); //用户客户自定开机动画

}

1.1 android模式

第一种android模式:
BootAnimation.cpp

initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");

这两张图片都在frameworks/base/core/res/assets/images目录下,替换即可。

在这里插入图片描述
使用美女替换一下:
在这里插入图片描述

2.2 movie模式

这个用户可以自定义,也就是在打包时通过.mk文件拷贝到system/media中。


二、开机动画代码运行位置

frameworks/base/cmds/bootanimation
bootanimation/
├── Android.mk 编译脚本
├── audioplay.cpp 音频播放
├── AudioPlayer.cpp 播放器
├── AudioPlayer.h
├── audioplay.h
├── BootAnimation.cpp 开机动画播放主流程,重点关注
├── BootAnimation.h
├── bootanimation_main.cpp init启动过程注册服务文件
├── bootanim.rc Android新版本,服务启动方式
└── FORMAT.md 说明文档,markdown格式

三、删除开机动画

bool bootAnimationDisabled() {
      char value[PROPERTY_VALUE_MAX];
      property_get("debug.sf.nobootanimation", value, "0");
      if (atoi(value) > 0) {
          return true;
      }

将 property_get(“debug.sf.nobootanimation”, value, “0”);改为property_get(“debug.sf.nobootanimation”, value, “1”)即可,即无法进入到movie开机动画流程中。

四、自定义开机动画实践

frameworks\base\cmds\bootanimation\ BootAnimation.cpp
动画文件的存在位置,内部使用OpenGL渲染

static const char OEM_BOOTANIMATION_FILE[] = "/oem/media/bootanimation.zip";
static const char PRODUCT_BOOTANIMATION_DARK_FILE[] = "/product/media/bootanimation-dark.zip";
static const char PRODUCT_BOOTANIMATION_FILE[] = "/product/media/bootanimation.zip";
static const char SYSTEM_BOOTANIMATION_FILE[] = "/system/media/bootanimation.zip";
static const char APEX_BOOTANIMATION_FILE[] = "/apex/com.android.bootanimation/etc/bootanimation.zip";
static const char PRODUCT_ENCRYPTED_BOOTANIMATION_FILE[] = "/product/media/bootanimation-encrypted.zip";
static const char SYSTEM_ENCRYPTED_BOOTANIMATION_FILE[] = "/system/media/bootanimation-encrypted.zip";
static const char OEM_SHUTDOWNANIMATION_FILE[] = "/oem/media/shutdownanimation.zip";
static const char PRODUCT_SHUTDOWNANIMATION_FILE[] = "/product/media/shutdownanimation.zip";
static const char SYSTEM_SHUTDOWNANIMATION_FILE[] = "/system/media/shutdownanimation.zip";

动画文件的读取是按顺序进行的,如果读取成功,则不再读取后续的文件,如果失败,则读取下一个文件。
首先判断自定义的开机动画文件mZipFileName是否存在,如果存在就调用movie()完成自定义开机画面的显示;
如果不存在,调用android()完成系统默认开机画面的显示。
开机动画包bootanimation.zip
每个压缩文件都必须包含有一个名称为"desc.txt"的文件,这是用来描述用户自定义的开机动画是如何显示的。

480 640 20
p 1 0 folder1
p 2 20 folder2
c 0 0 folder3
c 1 0 folder4

第1行用来描述开机动画在屏幕显示的大小及帧率。具体为:开机动画的宽度为480个像素,高度为640个像素,显示频率为每秒20帧,即每帧显示1/20秒。
下面的每一行代表一个片段,显示的时候会按照顺序从上到下依次显示。

第1个字符为片段类型,有’c’和’p’两种;
第2个数字为该片段重复显示的次数,如果为’0’,表示会无限重复显示;
第3个数字为两次显示之间的间隔,单位为第一行中定义的每帧显示的时间;
第4个字符串为该片段所在的文件夹,一个片段可以由多个png图片组成,都存放在folder文件夹中;
解释一下:

“p 1 0 folder1”——代表该片段显示1次,与下一个片段间隔0s,该片段的显示图片路径为bootanimation.zip/folder1;
“p 2 20 folder2”——代表该片段显示2次,且两次之间显示的间隔为20(1/20)=1s,与下一个片段间隔20(1/20)=1s,该片段的显示图片路径为bootanimation.zip/folder2;
“c 0 0 folder3”——代表该片段无限循环显示,且两次显示的间隔为0s,与下一个片段间隔0s,该片段的显示图路径为bootanimation.zip/folder3;
“c 1 10 folder4”——代表该片段显示1次,显示后暂停10*(1/20)=0.5s,该片段的显示图路径为bootanimation.zip/folder4;

实验步骤为
源码里将bootanimation.zip文件替换成自己想要的。
或者

1.adb root
2.adb remount
3.adb push D:\bootanimation.zip /system/media/
4.adb reboot

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uinapp触底与下拉时间触发的使用

在UniApp中&#xff0c;onReachBottom 和 onPullDownRefresh 是两个重要的生命周期函数&#xff0c;分别用于处理页面滚动到底部时触发的事件和下拉刷新时触发的事件。 在页面的 .vue 文件中&#xff1a; <template> <view> <scroll-view scroll-y"tr…

React Native框架开发APP,安装免费的图标库(react-native-vector-icons)并使用详解

一、安装图标库 要使用免费的图标库&#xff0c;你可以使用 React Native Vector Icons 库。 首先&#xff0c;确保你已经安装了 react-native-vector-icons&#xff1a; npm install --save react-native-vector-iconsnpm install --save-dev types/react-native-vector-ic…

Arcgis中使用NDVI阈值法提取农田shape

首先有一幅NDVI影像TIFF&#xff0c;对其查看农田上的NDVI范围&#xff0c;大概是0.1以上&#xff0c;因为是12月份&#xff0c;小麦播种完1-2个月&#xff0c;此时NDVI并不是很高&#xff0c;但是树林基本叶子掉落了&#xff0c;所以比较好提取农田。 打开地图代数-栅格计算器…

OpenHarmony OpenCV应用样例开发

背景 OpenCV 介绍 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它由一系列的 C 函数和少量 C 类构成&#xff0c;同时提供 Python、Java 和 MATLAB 等语言的接口&#xff0c;实现了图像处理和计算机视觉方面…

一则关于Go的高级构建指北

本文将探索Golang高级构建技巧&#xff0c;从而有助于创建更高效的二进制文件。 构建选项 以下是 go build 命令最常用的一些选项&#xff1a; -o: 指定输出文件名。默认输出文件名是主软件包的名称&#xff0c;在 Windows 系统中会自动添加 .exe 后缀。-v: 详细输出。该选项…

产品经理的进阶之路

1. 前言 本文深入剖析了产品经理这一职业从产品专员起步,逐步晋升为产品经理、高级产品经理,直至产品总监的整个职业发展路径。在每个阶段,产品经理都需承担不同的工作职责,展现出独特的职业特点。 2. 产品专员 关键词【产品需求/原型/文档/沟通】 对于初步接触产品领域…

Remote Desktop Manager for Mac:一站式远程桌面管理,高效掌控所有连接!

Remote Desktop Manager for Mac是一款专门用于远程桌面管理的软件。它的主要功能包括&#xff1a; 远程连接管理&#xff1a;Remote Desktop Manager允许用户集中管理所有远程连接&#xff0c;包括远程桌面、远程服务器、虚拟机、云服务等&#xff0c;用户可以一次性登录并管理…

Pocket 2荧光拍摄的几个有趣玩法

荧光是现象&#xff0c;当某种常温物质经某种波长的入射光&#xff08;通常是或&#xff09;照射&#xff0c;吸收光能后进入&#xff0c;并且立即退激发并发出出射光&#xff08;通常波长比入射光的波长&#xff0c;原先看不见的短波长紫外线&#xff0c;变成在可见光波段的可…

java算法day38 | 动态规划part01 ● 509. 斐波那契数 ● 70. 爬楼梯 ● 746. 使用最小花费爬楼梯

理论基础 递归五部曲&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 509. 斐波那契数 动规五部曲&#xff1a; 这里我们要用一个一维dp数组来保存递归的结果 确定dp数组以及下标的含义 dp…

Linux 环境安装 Elasticsearch 8.X

安装前说明 首先确定操作系统&#xff0c;在Linux发行版上执行uname -a查看具体系统。我是Ubuntu系统&#xff0c;可以用直接用apt-get安装&#xff0c;也可以下载tar.gz包手动安装。使用apt-get安装更方便快速&#xff0c;但不同的文件会被安装到不同的目录&#xff0c;不方便…

Java虚拟机(JVM)知识点总结

一. Java内存区域 1. JVM的内存区域划分&#xff0c;以及各部分的作用 可分为运行时数据区域和本地内存&#xff0c;按照线程私有和线程共享分类&#xff1a; 线程私有&#xff1a;程序计数器、虚拟机栈、本地方法栈。 线程共享&#xff1a;堆、方法区、直接内存。 JDK1.7…

Web APIs知识点讲解(阶段四)

DOM- 事件高级 一.回顾(购物车案例) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><meta http-equiv&qu…

NRF52832修改OTA升级时的bootloader蓝牙MAC

NRF52832在OTA升级时&#xff0c;修改了APP的蓝牙MAC会导致无法升级&#xff0c;原因是OTA程序的蓝牙MAC没有被修改所以手机扫描蓝牙时无法连接 解决办法 在bootloader的程序里面加入修改蓝牙mac地址的代码实现原理&#xff1a; 在bootloader蓝牙广播开启之前修改蓝牙mac 通…

接口自动化框架搭建(九):接入钉钉消息通知

1&#xff0c;jenkins安装钉钉插件 2&#xff0c;在钉钉群聊设置机器人 3&#xff0c;jenkins配置钉钉 根据情况选择&#xff1a; 除了这些&#xff0c;其他不用配置&#xff0c;配置完成点击确认 4&#xff0c;项目配置 添加后保存 5&#xff0c;测试下效果 构建完成后&a…

缓存数据库的意义、作用与种类详解

在现代计算机应用中&#xff0c;数据访问的性能往往是关键因素之一。随着数据量的增加和复杂应用的兴起&#xff0c;数据库的访问成本逐渐成为瓶颈。为了提高应用程序的响应速度、减轻后端数据库的负载压力&#xff0c;缓存数据库应运而生。 什么是缓存数据库&#xff1f; 缓存…

Cesium.js综合实验

Cesium.js综合实验 1 概述 Cesium是一个跨平台、跨浏览器的展示三维地球和地图的开源 JavaScript 库&#xff0c;是AGI公司计算机图形开发小组与2011年研发的三维地球和地图可视化开源JavaScript库&#xff0c;Cesium一词来源于化学元素铯&#xff0c;铯是制造原子钟的关键元…

深度学习| DiceLoss解决图像数据不平衡问题

图像数据不平衡问题 图像数据不平衡&#xff1a;在进行图像分割时&#xff0c;二分类问题中&#xff0c;背景过大&#xff0c;前景过小&#xff1b;多分类问题中&#xff0c;某一类别的物体体积过小。在很多图像数据的时候都会遇到这个情况&#xff0c;尤其是在医学图像处理的…

【ctf.show】--- md5

ctf.show_web9 1.用 dirsearch 扫目录&#xff1a;python dirsearch.py -u 网址 -e php 发现 robots.txt 2.访问 robots.txt 文件 发现 index.phps 3.访问 index.phps 发现源码 <?php $flag""; $password$_POST[password]; if(strlen…

JSP技术及其应用

目录 一、JSP 指令元素 1. page指令 二、JSP 注释 1. HTML注释&#xff1a; 2. Java注释&#xff1a; 3. JSP注释&#xff1a; 三、页面编码格式 1. pageEncoding&#xff1a; 2. contentType&#xff1a; 一、JSP 指令元素 JSP包含三种主要的指令元素&#xff1a;pag…

开源,微信小程序-超级计算器T3000 简介

笔者于四年前自学微信小程序开发&#xff0c;这个超级计算器T3000就是当时的练习作品。超级计算器T3000的功能有很多&#xff0c;其中的核心技术是矩阵计算&#xff0c;使用的工具库是math.js&#xff0c;其次是复杂运算和分式运算。关于math.js的使用&#xff0c;可以参考另一…