当前位置:   article > 正文

Android 开关机动画的实现及支持MP4视频播放_安卓开机动画改开机mp4

安卓开机动画改开机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方法代码如下

  1. bool BootAnimation::video()
  2. {
  3. const float MAX_FPS = 60.0f;
  4. const bool LOOP = true;
  5. const float CHECK_DELAY = ns2us(s2ns(1) / MAX_FPS);
  6. eglMakeCurrent(mDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
  7. eglDestroySurface(mDisplay, mSurface);
  8. #if 0
  9. float asp = 1.0f * mWidth / mHeight;
  10. SurfaceComposerClient::openGlobalTransaction();
  11. mFlingerSurfaceControl->setPosition(mWidth, 0);
  12. mFlingerSurfaceControl->setMatrix(0, 1 / asp, -asp, 0);
  13. SurfaceComposerClient::closeGlobalTransaction();
  14. #endif
  15. sp<MediaPlayer> mp = new MediaPlayer();
  16. mp->reset();
  17. if(!mShutdown) {
  18. if(systemfile) {
  19. mp->setDataSource(USER_BOOTVIDEO_FILE, NULL);
  20. } else {
  21. mp->setDataSource(SYSTEM_BOOTVIDEO_FILE, NULL);
  22. }
  23. } else {
  24. if(systemfile) {
  25. mp->setDataSource(USER_SHUTDOWN_VIDEO, NULL);
  26. } else {
  27. mp->setDataSource(SYSTEM_SHUTDOWN_VIDEO, NULL);
  28. }
  29. }
  30. mp->setLooping(false);
  31. Parcel* _parcel = new Parcel;
  32. mp->setParameter(100, *_parcel);
  33. mp->setVideoSurfaceTexture(mFlingerSurface->getIGraphicBufferProducer());
  34. mp->prepare();
  35. mp->start();
  36. #if 1
  37. while(true) {
  38. if(exitPending())
  39. break;
  40. usleep(CHECK_DELAY);
  41. checkExit();
  42. }
  43. #endif
  44. mp->stop();
  45. return false;
  46. }

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

service shutdownanim /system/bin/bootanimation -shutdown

    user graphics

    group graphics



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

  1. ProgressDialog pd = new ProgressDialog(context);
  2. pd.setTitle(context.getText(com.android.internal.R.string.power_off));
  3. pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
  4. pd.setIndeterminate(true);
  5. pd.setCancelable(false);
  6. pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
  7. pd.show();

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


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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号