Android修改开关机动画声音
玛丽莲梦兔
902次浏览
2021年02月01日 15:43
最佳经验
本文由作者推荐
word页码-呼吁英语
开机画面,按照国际惯例,一般是分为
2
屏,当然也有
3
屏的说法, 不管怎样,我这里说得就是最后的一
屏,
按照
bootanimation
的 字面意思翻译,
大概也就是开机动画的意思,
那这就不说第几屏了,
直接用
“
开
机动画
”
这词。
首先,
开机动画的 地址:
。
。
。
要修改开机动画就是修改
bootanima tion
这个文件。如果说你的手机里没有这个文件,那就是说明你用的是官方原始版本的
ro m
,开机动画没有被
修改过,
但这不碍事,
没有就放一个进去
,到时候想换回最原始的开机画面,
也可以把
bootanimation
这个文件删了。官方最原始的开机动画在
system etsimages
里面
,< br>里面主要是
2
张图片,高手面可以去研究一下,说不定通过这个文件可以用代码实现动画 的过程。
接下来,说说
这个文件的结构。
bootan imation
里面主要包含一个
desc.
txt
以及
N
个文件夹。而文件夹里面放着的就是你要的开机动画的图片。
的作用就是指导系统如何去执行你
的开机画面。
下面继续说说
这个文档要怎么写。
先看例子,如果我的开机动画要用到
2
个文件夹,分别是
part1
和part2,
。。。。我希望开机的时候,先
把
part1
里面的图片都 播放一遍,然后再循环播放
part2
里面的文件,直到进入系统。那么
文档
的内容应该如下:
302 480 5
p 1 0 part1
p 0 0 part2
就这么多,现在解释一下这些命令吧。
第一行,
320 480
是代表你屏幕的分辨率,因为我们的胖
6
是
320*480
的,这就不多说了。后面的
5
是
说,
5帧每秒,不懂的可以这么理解,
5
是代表一秒钟播放
5
张图片。就这么简 单。
第二行,
p 1 0 part1
。
p
应该是
play
吧,也就是播放的意思。
1
是播放一次。
0
是空指令,就 是什么都不
做。
part1
就是说,
这条指令是针对
part1这个文件夹的。
整条指令的意思就是,
播放
part1
里面的图片
1
次,然后什么都不做,马上进入下一条指令。
第三行,
p 0 0 p art2
。
p
依然是播放。第一个
0
这里是代表循环播放,第二个< br>0
和上面第二条指令一样,
代表什么也不做。
part2
也就不多说了 。
至于为什么第一个
0
为什么是代表循环,只能这么说,这事国际惯例,就 像用迅雷的时候,
0
代表不限制速
度一样,系统规定的,你知道就好,别纠结。
总结公式如下
第一条指令:屏幕的分辨率(空格)播放频率
第二条指令:
p
(空格)播放次数(空格)后续操作(空格)作用文件夹
第三条指令:同上
第
N
条指令:同上
屏幕分辨率的格式是:宽(空格)高,胖
6
的就是
320 480
。 。。播放频率,上面已经说清楚了,至于到
底要用多大的数字,
视你开机动画的张数而定,比如说,
一共有
100
张图片,
开机时间是
20
秒,< br>那么
100/20
就是
5
。
播放次数,
1
是代表一次,
0
代表循环播放。如果要播放
2
次的话,就是就是打个
2
上去,应该是这样吧,
反正我是没试过,只试过
0
和
1.
后续操作,
0
代表什么都不做,直接进入下一条指令。
10
是代表稍 作停顿。
至于文件夹里面的图片,比较简单,首先,
纠正一个说法,之前说必须要是
png
格式,经过我试验证明,
jpg
格式的也可以,< br>其他的有待试验,
不过只支持静态图片这点应该是真的,
动态图片同样有待试验。
其次,
关于图片的尺寸,是不做要求的,只要在
txt
文档里写好手机的分辨率即可 ,开机的时候系统会自动适配。
其其次要按播放循序命名,建议用
5
位数字,比如说, 第一张图片是
00010
,第二张就是
00020.
。。。。
为什么 要从
00010
开始,
而不是
00001
?因为这事预防以后要在第 一张和第二张中间再插一张图片进去的
话,就可以把插进去的图片命名为
00011
, 在
00010
之后,
00020
之前。就这么简单。至于图片那里来
嘛,当然是自己网上找啦,也可以下载别人的
bootanimation
,然后修改一下。< br>
最后就是压缩包了,把需要用到的
part
文件夹跟
打包成
zip
格式,必须是
zip
,不能是
rar
,而
且打包的时候压缩方式要选择
“
存储
”
模式。然后改名成为
,复制到
SD
卡里,再通过
RE
文件管理器复制到
syst emmedia
下面,重启。
要注意一下
,bootanima tion
不能太大,大了会卡,一般不要超过
3M
,。
——————————————————————————————————————————————
——————————————————————————————————————
1. Linux
系统启动,出现
Linux
小企鹅画面
(reboot)(Android 1.5
及以上版本已经取消加载图片
)
;
2. Android
平台启动初始化,出现
文字字样画面;
3. An droid
平台图形系统启动,出现含闪动的
ANDROID
字样的动画图片
(start)
。
现在我们说的是第三种方式
(
基于模拟器
)
:
a ndroid
开机动画叫源码位于
frameworks/base/cmds/bootan imation
下,这个程序会将
/data/local/
或
/syste m/media/
里面的
png
图片以动画的形式
播放出来。
首先,我们先来分析一下源码:
frameworks/base/cmds/bootanimation/
首先看一下定义的常量:
#define USER_BOOTANIMATION_FILE
1
2
#define
SYSTEM_BOOTANIMATION_FILE
3
#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE
4
BootAnimation::readyToRun()
进入一个
if
判断语句
1
2
3
4
5
6
7
if ((encryptedAnimation &&
(access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK)
== 0) &&
((SYSTEM_ENCRYPTED_BOOTANIMATION_FILE)
== NO_ERROR)) ||
((access(USER_BOOTANIMATION_FILE, R_OK) == 0) &&
8
((USER_BOOTANIMATION_FILE) == NO_ERROR)) ||
9
10
((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&
11
((SYSTEM_BOOTANIMATION_FILE)
== NO_ERROR)))
{
mAndroidAnimation = false;
}
BootAnimation::threadLoop()
1
if (mAndroidAnimation) {
2
r = Android(); //
执行
android
字体闪动的图片
3
} else {
4
r = movie(); //
执行
中提供的动画图片
5
}
1
==> BootAnimation::Android()
会加载
和
==> BootAnimation::movie()
会加载
中的内容
我们下载的源码里默认是没有那些个
.zip
动画的,所以总会跳到
android< br>字体闪动的画面
所以如果你系那个用
.zip
的动画那么把你做好的 动画拷贝到编译好对应的目录下即可,然后执行
make
snod
整合进
img
包就可以看到效果了
如果你想修改
android
闪动的那两张图片的话,最简单的方法是直接替换图片,如果你懂
op enGL
的话也
可以自己做酷炫的动画
那两张图片放在
./fra meworks/base/core/res/assets/images
目录下,
一 张镂空的
android
图,一张
发光效果,动画效果就是下面那张发光的效果图不断 左右移动。
我是用
Photoshop
直接修改的
修改完后直接替换,然后再
mmm frameworks/base
, make snod
即可
以下是我修改后的效果图:
看样子还想那么回事
接下来我们给系统添加开机声音
由于动画是在
BootAnimation
播放的,所以我们的声音肯定也在这个类中做,照猫画虎
首先在
BootAnimation.h
添加方法的声明和头文件的引用
1
#include
2
#include
添加方法
void bootMusic();
然后在
中实现这个方法:
1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
void BootAnimation::bootMusic()
{
int index;
MediaPlayer* mp = new MediaPlayer();
if (mp->setDataSource(
== NO_ERROR) {
mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIB LE);
mp->prepare();
}
AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENF ORCED_AUDIBLE
, &index);
if (index != 0) {
mp->seekTo(0);
mp->start();
}
}
请注意这个目录
setDataSource(
其实这个目录是随便写的,
你想从哪个目录读这个文件就从哪个 目录读好了,
但是你要把这个文件放在对应
的目录下
比如,这个目录是
system/etc (
这个目录是
android系统的目录,不是源码的目录
),
这个文件夹是只有读
权限而没有写权限的,所有 你不用试
adb shell
了,没用的
其实
system/et c
这个目录对应的是我们编译后
out
文件夹下的
xxx
,然后在< br>system/etc
,所以你把
放到这里就行了,当然如果你这时再
emulaor
也同样是看不到效果的,因为你修改完还没
有编译,和上面修改图片一样,
make snod
一下
然后和图上一样,你就会生成新的
,当然 你之前添加的
也会自动被编译进去
了
然后 再修改
bootanimation_
这个文件,因为方法也申明了,也实现了,就是还没有调 用,所以
调用就在这里调
1
//play boot music -yp
2
BootAnimation *animation = new BootAnimation();
3
animation->bootMusic();
修改完这写以后还需要修改
文件
因为播放声音还需要引入库
LOCAL_SHARED_LIBRARIES :=
libcutils
libutils
libbinder
libui
libskia
libEGL
libGLESv1_CM
libgui
libmedia
请注意,
libmedia
是新添加的;
完事后就
ok
了,当然还是需要编译的
mmm
frameworks/base/cmds/bootanimation/
make snod
大功告成,这样你就成功的添加了开机音乐
也许有人会问,那
android
系统自带的那些音乐和铃声在什么地方呢?
源码目录在
framworks/base/data/sounds
至于编译完成后放到什么地方了那是
文件上配置的
不过这里叫
我们可以看到他又包含了很多
mk
文件,< br>在同一目录下就可以找到,
上图中就可以,
我们随便打开一个看看
这下你们顿时明白了吧,这些资源编译后都去了神马地方
所以,
在刚才添加
的时候,
其实可以直接把声音资源丢到
framw orks/base/data/sounds
这个目录下
然后再
mk
文件中这样修改:
$$(LOCAL_PATH)/:system/etc/
不用我说,当然是执行
mmm
还有
make snod
命令了
其实还有一种办法,如果你不想这么麻烦,你可以之际把
文件丢
到
./frameworks/base/core/res/assets/sounds
下,用的时候 怎么用呢?
加载的时候路径是什么呢?我们看看源码
我们可以看到之前我们修改的那两张图片是怎么被加载进来的