android 声音动画,修改Android开机图片、动画、声音



所需资源下载地址:http://download..net/detail/hanbo622/9725818

一、修改第一张图片

1、将"png-24"格式的图片转换成raw格式(linux下的ImageMagick自带的convert命令,否则执行sudo apt-get install imagemagick)

convert -depth 8 logo.png rgb:logo.raw

2、将raw格式装换成rle格式(源码:build/tools/rgb2565)

./rgb2565 -rle pak_fu_kanlogo.rle

3、修改system/core/init/init.h中#define INIT_IMAGE_FILE "/initlogo.rle" 文件名"/pak_fu_kanlogo.rle"

4、把pak_fu_kanlogo.rle文件放到out/target/product/ut4412/root中

注意:使用PS制作一张480*800的图片,保存时选“保存为 Web 所用格式”,然后在弹开的窗口上,“预设”项选择“PNG-24”,

保存为logo.png ,好像只支持png-24,其他格式生成的rle文件显示不正常

二、修改第二张图片

方法一:

在window下的操作:

1 在 Widows 环境中建立文件夹:bootanimation

2 在bootanimation文件夹中建立子文件夹:

part0

part1

然后将一批.png文件拷贝到文件夹part0里面,part1中暂时不放图片文件

3 在 bootanimation 文件夹中建立文本文件:

desc.txt

可能在desc.txt中写如下信息(注,该文件是google定义的,可在网上搜索得到):

1024 600 10

p 1 0 part0

p 0 0 part1

文件 desc.txt 的内容解释:

(1)分辨率

1024 600

第一行”1024 600”:表示机器屏幕分辨率width height

(2)帧率

第一行”10”:表示每秒中播放10张图片(gong 10zhang )

(3)p 1 0 part0

p:表示play

1:表示播放一遍,如果是0则表示循环播放

0:表示延时时间

part0:此文件夹下放置开机显示的动画图片,图片分辨率要和机器分辨率一样,否则显示会有问题

(4)p 0 0 part1

在part0的图片都显示完毕后,就显示part1中的图片

4 在文件夹 bootanimation 内,同时选择“part0, part1, desc.txt”,然后压缩

(在Linux下压缩:zip -r -X -Zstore ../bootanimation.zip part*/*.png desc.txt)

压缩的设置如下:

(a)压缩文件名:bootanimation.zip

(b)压缩文件格式:ZIP

(c)压缩方式:存储

5 将前面生成的bootanimation.zip拷贝到工程中

$ cd  device/samsung/ut4412/apk

$ mkdir  app_newpad

注:将生成的bootanimation.zip文件拷贝到文件夹app_newpad中

6 编辑 device.mk

$ vi  device/samsung/ut4412/device.mk

##################################

#  copy proprietary apk

##################################

COPY_APK_TARGET := $(call all-apk-files-under,apk)

PRODUCT_COPY_FILES += $(foreach apkName, $(COPY_APK_TARGET), \

$(addprefix $(LOCAL_PATH)/apk/, $(apkName)):$(addprefix system/app/, $(apkName)))

PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/apk/flashplayer.nm:system/app/flashplayer.nm

# 添加以下信息

# 注意路径的一致性

PRODUCT_COPY_FILES += \

$(LOCAL_PATH)/apk/app_newpad/bootanimation.zip:system/media/bootanimation.zip

方法二:

android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip

或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来。

首先,我们先来分析一下源码:frameworks/base/cmds/bootanimation/BootAnimation.cpp

首先看一下定义的常量:

#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"

#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"

#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"

BootAnimation::readyToRun()

进入一个if判断语句

if ((encryptedAnimation &&

(access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0) &&

(mZip.open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE) == NO_ERROR)) ||

((access(USER_BOOTANIMATION_FILE, R_OK) == 0) &&

(mZip.open(USER_BOOTANIMATION_FILE) == NO_ERROR)) ||

((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&

(mZip.open(SYSTEM_BOOTANIMATION_FILE) == NO_ERROR))) {

mAndroidAnimation = false;

}

BootAnimation::threadLoop()

if (mAndroidAnimation) {

r = Android(); // 执行android字体闪动的图片

} else {

r = movie(); // 执行bootanimation.zip中提供的动画图片

}

==> BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"

==> BootAnimation::movie()会加载bootanimation.zip中的内容

我们下载的源码里默认是没有那些个.zip动画的,所以总会跳到android字体闪动的画面

所以如果你系那个用.zip的动画那么把你做好的动画拷贝到编译好对应的目录下即可,然后执行make snod整合进img包就可以看到效果了

如果你想修改android闪动的那两张图片的话,最简单的方法是直接替换图片,如果你懂openGL的话也可以自己做酷炫的动画

那两张图片放在./frameworks/base/core/res/assets/images  目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。

我是用Photoshop直接修改的

修改完后直接替换,然后再 mmm frameworks/base  , make snod 即可

三、修改开机声音

1、rameworks/base/cmds/bootanimation目录下修改代码

首先在BootAnimation.h添加方法的声明和头文件的引用

#include

#include

//-----add by hslong-----------

#include

#include

class SkBitmap;

添加方法 void bootMusic();

class BootAnimation : public Thread, public IBinder::DeathRecipient

{

public:

BootAnimation();

virtual     ~BootAnimation();

sp session() const;

//---------add by hslong---------

void bootMusic();

private:

virtual bool        threadLoop();

virtual status_t    readyToRun();

virtual void        onFirstRef();

virtual void        binderDied(const wp& who);

......

}

2、然后在BootAnimation.cpp中实现这个方法:

#define SYSTEM_BOOTMUSIC_FILE "/system/media/poweron.wav"

......

namespace android {

// ---------------------------------------------------------------------------

//-------add by hslong--------------

void BootAnimation::bootMusic()

{

int index;

audio_devices_t device;

MediaPlayer* mp = new MediaPlayer();

if((access(SYSTEM_BOOTMUSIC_FILE,F_OK))!=-1){

printf("access audio\n");

if (mp->setDataSource(SYSTEM_BOOTMUSIC_FILE, NULL) == NO_ERROR) {

printf("setDataSource audio\n");

mp->setAudioStreamType(AUDIO_STREAM_ENFORCED_AUDIBLE);

mp->prepare();

mp->setLooping(true);

}

device = AudioSystem::getDevicesForStream(AUDIO_STREAM_ENFORCED_AUDIBLE);

printf("device = %d\n", device);

bool temp = AudioSystem::setStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, index, device);

//printf("index = %d,temp = %d\n", index,temp);

temp = AudioSystem::getStreamVolumeIndex(AUDIO_STREAM_ENFORCED_AUDIBLE, &index, device);

//printf("index = %d,temp = %d\n", index,temp);

if (index != 0){

//printf("index!=0\n");

mp->seekTo(0);

mp->start();

}

}

} //add end

......

}

3、然后再修改bootanimation_main.cpp这个文件,添加调用

// create the boot animation object

sp boot = new BootAnimation();

//------add by hslong---------

BootAnimation *animation = new BootAnimation();

animation->bootMusic();

//----add end

IPCThreadState::self()->joinThreadPool();

4、修改完这写以后还需要修改Android.mk文件

因为播放声音还需要引入库

LOCAL_SHARED_LIBRARIES := \

libcutils \

libutils \

libbinder \

libui \

libskia \

libEGL \

libGLESv1_CM \

libgui \

libmedia  //---add by hslong----

5、把音频文件poweron.wav放到out/target/product/ut4412/system/media下面

注意:上面只是起到了播放音乐的作用,那么要同步,只需要将代码中的

mp->start();

移至你需要播放音乐的位置即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值