• Android4.0.3 修改 启动 动画


    Android平台图形系统启动后,出现含闪动的ANDROID字样的动画图片,

    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;
    }

    bool   BootAnimation::threadLoop()

    {

          bool r;

          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 即可

     以下是我修改后的效果图:

      image

     ==============================


    而bootanimation.zip中内容格式为
    bootanimation.zip
    |-- desc.txt
    |-- part
    其中desc.txt为描述文件
    120 180 30
    p 1 0 part

    120和180分别对应图像 宽、高像素数,30表示将按照30fps速度播放图片

    p 是一个分隔符,1 表示播放一遍,0表示播放完后停顿 0 帧,最后是图片所在的zip包里的目录名

    part表示 含有图片的目录为part
    p后面的数字是指播放次数 0为循环

    根据这个语法,我们也可以自定义各种动画形式,例如下面所示:

      480 288 15

      p 2 30 folder0        将folder0里的图片,播放2遍,播放完一遍后停顿30帧,因为我们之前设置了帧率是15帧每秒,那么这里就等于停顿2秒。
      p 0 0 folder1        将folder1里的图片无限循环播放,每次播放不停顿。


    制作bootanimation.zip注意:

         首先从里面的图片说起 图片可以是PNG格式也可以是jpg格式,建议找到的图片要和自己机子的分辨率一样,如果不是也可以的 有可能变形 注意图片的大小要统一(如果不会做连接的图片组 直接找个适合自己分辨率的动态图片分解出PNG格式的静态图片,用ImageReady可以批量导出)
         建立part1 part2或android文件夹 放进一组连接的图片组
         开始压缩成ZIP格式  名字一定要bootanimation.zip  压缩方式一定是存储     压缩完了看下大小一般最大的2MB左右 太大了用JPEG Imager压缩下 压缩图片很好的


    然后part0,part1目录下内容结构为
    |-- desc.txt
    |-- part0
    |   `-- bootanim_static_0000.png
    `-- part1
        |-- bootanim_0000.png
        |-- bootanim_0001.png
        |-- bootanim_0002.png
        |-- bootanim_0003.png
        |-- bootanim_0004.png
        |-- bootanim_0005.png
        |-- bootanim_0006.png
        `-- bootanim_0007.png

    最后我们来压缩


    对于windows的压缩方法为:

    使用winrar,选择ZIP格式,压缩标准要选“储存”。


    ==================

    以下讲解 bootanimation.zip这个文件的结构。bootanimation里面主要包含一个desc.txt以及N个文件夹。而文件夹里面放着的就是你要的开机动画的图片。decs.txt的作用就是指导系统如何去执行你的开机画面。
    下面继续说说desc.txt这个文档要怎么写。
    先看例子,如果我的开机动画要用到2个文件夹,分别是part1和part2,。我希望开机的时候,先把part1里面的图片都播放一遍,然后再循环播放part2里面的文件,直到进入系统。那么decs.txt文档的内容应该如下:
    320 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 part2。p依然是播放。第一个0这里是代表循环播放,第二个0和上面第二条指令一样,代表什么也不做。part2也就不多说了。

    总结公式如下
    第一条指令:屏幕的分辨率(空格)播放频率
    第二条指令:p(空格)播放次数(空格)后续操作(空格)作用文件夹
    第三条指令:同上
    第N条指令:同上
    屏幕分辨率的格式是:宽(空格)高,胖6的就是320 480。。。播放频率,上面已经说清楚了,至于到底要用多大的数字,视你开机动画的张数而定,比如说,一共有100张图片,开机时间是20秒,那么100/20就是5。
    播放次数,1是代表一次,0代表循环播放。如果要播放2次的话,就是就是打个2上去,应该是这样吧,反正我是没试过,只试过0和1.
    后续操作,0代表什么都不做,直接进入下一条指令。10是代表稍作停顿。

    至于文件夹里面的图片,比较简单,首先,纠正一个说法,之前说必须要是png格式,经过我试验证明,jpg格式的也可以,其他的有待试验,不过只支持静态图片这点应该是真的,动态图片同样有待试验。其次,关于图片的尺寸,是不做要求的,只要在txt文档里写好手机的分辨率即可,开机的时候系统会自动适配。其次要按播放循序命名,建议用5位数字,比如说,第一张图片是00010,第二张就是00020.。。。。为什么要从00010开始,而不是00001?因为这事预防以后要在第一张和第二张中间再插一张图片进去的话,就可以把插进去的图片命名为00011,在00010之后,00020之前。就这么简单。至于图片那里来嘛,当然是自己网上找啦,也可以下载别人的bootanimation,然后修改一下。

    最后就是压缩包了,把需要用到的part文件夹跟decs.txt打包成zip格式,必须是zip,不能是rar,而且打包的时候压缩方式要选择“存储”模式。然后改名成为bootanimation.zip。

    要注意一下,bootanimation不能太大,大了会卡,一般不要超过3M。







  • 相关阅读:
    .net开发微信(1)——微信订阅号的配置
    工作中EF遇到的问题
    .net Entity Framework初识1
    Razor视图
    jquery中利用队列依次执行动画
    .net找List1和List2的差集
    angularjs ng-if 中的ng-model 值作用域问题
    Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题
    springboot 启动排除某些bean 的注入
    angularjs 初始化方法执行两次以及url定义错误导致传值错误问题
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744990.html
Copyright © 2020-2023  润新知