android直到开机动画播放完,Android 开关机动画的实现及支持MP4视频播放

原创文章,转载请注明出处,谢谢。

一,前言

对于开机动画的实现原理,网上很多,本文不做讲述。本文仅针对开关机动画支持Mp4视频及实现关机动画做简略讲述

二,前期准备及说明

开机动画MP4视频文件名及路径:/system/media/boot.mp4、/data/local/boot.mp4

关机动画MP4视频文件名及路径:/system/media/shutdown.mp4、/data/local/shutdown.mp4

三,需要修改的文件

1.开机动画的MP4视频支持

frameworks/base/cmds/bootanimation/BootAnimation.cpp

frameworks/base/cmds/bootanimation/BootAnimation.h

frameworks/base/cmds/bootanimation/Android.mk

2.关机动画实现

frameworks/base/cmds/bootanimation/BootAnimation.cpp

frameworks/base/cmds/bootanimation/bootanimation_main.cpp。

ShutdownThread.java

init.rc

四,具体修改

播放MP4格式支持较为简单,主要是在

frameworks/base/cmds/bootanimation/BootAnimation.cpp添加video()方法并在readytorun判断文件是否存在,并在threadloop判断是否进入video()方法。

video方法代码如下

bool BootAnimation::video()

{

const float MAX_FPS = 60.0f;

const bool LOOP = true;

const float CHECK_DELAY = ns2us(s2ns(1) / MAX_FPS);

eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);

eglDestroySurface(mDisplay, mSurface);

#if 0

float asp = 1.0f * mWidth / mHeight;

SurfaceComposerClient::openGlobalTransaction();

mFlingerSurfaceControl->setPosition(mWidth, 0);

mFlingerSurfaceControl->setMatrix(0, 1 / asp, -asp, 0);

SurfaceComposerClient::closeGlobalTransaction();

#endif

sp mp = new MediaPlayer();

mp->reset();

if(!mShutdown) {

if(systemfile) {

mp->setDataSource(USER_BOOTVIDEO_FILE, NULL);

} else {

mp->setDataSource(SYSTEM_BOOTVIDEO_FILE, NULL);

}

} else {

if(systemfile) {

mp->setDataSource(USER_SHUTDOWN_VIDEO, NULL);

} else {

mp->setDataSource(SYSTEM_SHUTDOWN_VIDEO, NULL);

}

}

mp->setLooping(false);

Parcel* _parcel = new Parcel;

mp->setParameter(100, *_parcel);

mp->setVideoSurfaceTexture(mFlingerSurface->getIGraphicBufferProducer());

mp->prepare();

mp->start();

#if 1

while(true) {

if(exitPending())

break;

usleep(CHECK_DELAY);

checkExit();

}

#endif

mp->stop();

return false;

}

关机动画实现 需要修改init.rc 添加如下服务

service shutdownanim /system/bin/bootanimation -shutdown

user graphics

group graphics

ShutdownThread.java修改beginShutdownSequence方法把如下代码注释掉

ProgressDialog pd = new ProgressDialog(context);

pd.setTitle(context.getText(com.android.internal.R.string.power_off));

pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));

pd.setIndeterminate(true);

pd.setCancelable(false);

pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);

pd.show();

并添加android.os.SystemProperties.set("ctl.start", "shutdownanim");即可

最后重新编译boot及boota 重启即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值