默默珍藏:http://bbs.gfan.com/android-6886761-1-1.html
当我们每次用别人的动画时会发现有时候只是喜欢其中的某几个界面的切换效果或是对其中的某个切换效果不满意,毕竟每个人的要求不同,于是我们就希望自己能修改出一个满意的效果,看了本文的介绍你就会发现其实修改动画并没有想象中的那么难,好了,下面是各个界面切换效果所对应的XML。
wallpaper_close_enter.xml----------------进入程序弹出
wallpaper_close_exit.xml------------------进入程序移除
wallpaper_open_enter.xml----------------退出程序弹出
wallpaper_open_exit.xml------------------退出程序移除
activity_open_exit.xml-------------------退出多级菜单移除
activity_open_enter.xml------------------退出多级菜单弹出
activity_close_exit.xml------------------进入多级菜单移除
activity_close_enter.xml------------------进入多级菜单弹出
task_open_exit.xml-------------------------任务退出移除
task_open_enter.xml-----------------------任务退出弹出
task_close_exit.xml-----------------------任务进入移除
task_close_enter.xml---------------------任务进入弹出
submenu_exit.xml------------------------子菜单移除
submenu_enter.xml-----------------------子菜单弹出
toast_exit.xml---------------------------提示窗口移除
toast_enter.xml--------------------------提示窗口弹出
status_bar_exit.xml----------------------状态栏移除
status_bar_enter.xml-------------------------状态栏弹出
lock_screen_exit.xml-----------------------------解锁移除
lock_screen_enter.xml------------------------------解锁弹出
lock_screen_behind_enter.xml-------------------------锁屏后进入
input_method_exit.xml--------------------------------输入法面板移除
input_method_enter.xml-----------------------------输-入法面板弹出
dialog_exit.xml------------------------------------对话框移除
dialog_enter.xml---------------------------------对话框弹出
options_panel_exit.xml------------------------------选项菜单移除
options_panel_enter.xml------------------------------选项菜单弹出
以上这些是搜索所得,但是就算我们看了也是云里雾里不明所以,究竟哪个xml对应哪个界面切换效果我们还是一塌糊涂!
其实我们只看英文名就能大概明白它控制的效果,下面我主要介绍前几个xml,这也是我们修改的目的。
wallpaper_close_enter wallpaper_close_exit wallpaper_open_enter wallpaper_open_exit这四个是控制你从桌面启动退出应用时的切换效果;第一个按文件名理解,壁纸退出时进入的动画,就是比如你从桌面上启动QQ,QQ界面进入前台的动画;第二个壁纸退出时的退出动画,也就是从桌面启动QQ,桌面退出(其实是桌面进入后台)的动画;第三个壁纸打开时候进入的动画,就是你从QQ返回到桌面时桌面进入前台的动画;第四个壁纸打开时退出的动画,也就是从QQ返回到桌面时QQ消失的动画。(这也是我看到别人的一篇文章介绍后才理解的,并不是我想出来的)
按照上面的方法依次类推,后面的各个xml意思就不难理解了!其实我们可以在设置中把系统默认的动画时长调大就可以发现每一次交互都伴随两个过程:前台页面的消失与后台页面的进入,所以我们修改动画时要成对修改,不然显示的很怪异。
activity_close_enter activity_close_exit activity_open_enter activity_open_exit 这四个就是大家常说的所谓二三级动画,比如设置的各个页面进入返回
task_close_enter task_close_exit task_open_enter task_open_exit 这四个是任务间切换的过渡动画,比如从当前打开的浏览器切换到QQ
至于其他的xml就很好理解了,这里就不再做过多的介绍
当然以上这些对于原生的Android系统是通用的,但是对于像Flyme这样的所谓深度定制系统就有一些变化,我们反编译Framework后发现/res/anim下有activity_open_enter_mz.xml activity_open_exit_mz.xml activity_close_enter_mz.xml activity_close_exit_mz.xml这样的文件,再加上我们打通二三级动画时把styles.xml中定义的动画也修改成了这四个名字,所以修改二三级动画时要修改这四个文件!
对于任务切换动画就是task_open_exit.xml task_open_enter.xml task_close_exit.xml task_close_enter.xml这四个了,注意这四个文件在/res/anim-land /res/anim-port /res/anim-sw720dp这三个文件夹下都存在,我不知道需不需要都修改,但为了偷懒我把它们都修改了。
还有在/res/anim下还有activity_launch_open_enter_mz.xml和activity_launch_open_exit_mz.xml这两个文件,它们是控制从桌面打开应用时的动画,从名字就可以看出,但是我第一次修改时忽略了它们,只修改了wallpaper_close_enter wallpaper_close_exit wallpaper_open_enter wallpaper_open_exit这四个,发现从桌面打开应用时还是原来那个动画,只有退出或返回到桌面的动画变了,试了好几次还是这样,后来仔细排查才发现还有这两个文件,修改后才大功告成!对于其他的用原生android的手机只需要修改那四个文件就可以了,但Flyme还要修改另外两个,修改过那么多手机都是手到擒来,结果一修改MX2的这个就屡次失败了,魅族工程师真是狗屎!故意给我们DIY增加难度,再加上本人水平有限,也没那么多时间试验和检查,以至于刚开始屡遭失败!
最后跟大家推荐一款文件比对软件Beyond Compare,水大也推荐过它,我们可以用它来比较别人修改过的ROM和原版的不同之处,看看别人到底修改了哪些内容,这是最快学会美化的方法,不要整天嚷嚷着求这个求那个的方法,然后自己再在此基础上进一步发现更多可以修改的地方,当然自己可以直接发现就更好了,但是我们要学会感激,尊重别人的劳动成果,别人能发现毕竟是经过了很多次试验才发现的,别人发现的就是别人发现的,不能厚颜无耻的硬说成是自己发现的,这样只会让原作者寒心,这样就算别人再有新的发现也不愿意再与大家分享了!言归正传,下面简单介绍一下Android中使用XML来定义Tween Animation的基础知识,这些都是搜索而来的。
Tween Animation提供四种效果旋转、移动、伸展和渐变
Alpha——透明渐变 Scale——缩放 Translate——移动 Rotate——旋转XML定义动画,按照动画定义语法完成XML,置于/res/anim目录下,文件名作为资源ID引用;
XML定义动画语法:
XML文件中必须有一个根元素,可以是<alpha>、<scale>、<translate>、<rotate>中的任意一个,也可以是<set>来管理一个由前面几个元素组成的动画集合。
<set>是 一个动画容器,管理多个动画的群组,与之相对应的Java对象是AnimationSet。它有两个属性,android:interpolator代表 一个插值器资源,可以引用系统自带插值器资源,也可以用自定义插值器资源,默认值是匀速插值器;稍后我会对插值器做出详细讲解。 android:shareInterpolator代表<set>里面的多个动画是否要共享插值器,默认值为true,即共享插值器,如果 设置为false,那么<set>的插值器就不再起作用,我们要在每个动画中加入插值器。
<alpha>是 渐变动画,可以实现fadeIn和fadeOut的效果,与之对应的Java对象是AlphaAnimation。android:fromAlpha属 性代表起始alpha值,浮点值,范围在0.0和1.0之间,分别代表透明和完全不透明,android:toAlpha属性代表结尾alpha值,浮点 值,范围也在0.0和1.0之间。
<scale>是缩放动画,可以实现动态调控件尺寸的效 果,与之对应的Java对象是ScaleAnimation。android:fromXScale属性代表起始的X方向上相对自身的缩放比例,浮点值, 比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;android:toXScale属性代表结尾的X方向上相对自身的缩放比 例,浮点值;android:fromYScale属性代表起始的Y方向上相对自身的缩放比例,浮点值;android:toYScale属性代表结尾的 Y方向上相对自身的缩放比例,浮点值;android:pivotX属性代表缩放的中轴点X坐标,浮点值,android:pivotY属性代表缩放的中 轴点Y坐标,浮点值,对于这两个属性,如果我们想表示中轴点为图像的中心,我们可以把两个属性值定义成0.5或者50%。
<translate>是 位移动画,代表一个水平、垂直的位移。与之对应的Java对象是TranslateAnimation。android:fromXDelta属性代表起 始X方向的位置,android:toXDelta代表结尾X方向上的位置,android:fromYScale属性代表起始Y方向上的位 置,android:toYDelta属性代表结尾Y方向上的位置,以上四个属性都支持三种表示方式:浮点数、num%、num%p;如果以浮点数字表 示,代表相对自身原始位置的像素值;如果以num%表示,代表相对于自己的百分比,比如toXDelta定义为100%就表示在X方向上移动自己的1倍距 离;如果以num%p表示,代表相对于父类组件的百分比。
<rotate>是旋转动画,与 之对应的Java对象是RotateAnimation。android:fromDegrees属性代表起始角度,浮点值,单位: 度;android:toDegrees属性代表结尾角度,浮点值,单位:度;android:pivotX属性代表旋转中心的X坐标 值,android:pivotY属性代表旋转中心的Y坐标值,这两个属性也有三种表示方式,数字方式代表相对于自身左边缘的像素值,num%方式代表相 对于自身左边缘或顶边缘的百分比,num%p方式代表相对于父容器的左边缘或顶边缘的百分比。
另外,在动画中,如果我们添加了android:fillAfter="true"后,这个动画执行完之后保持最后的状态;android:duration="integer"代表动画持续的时间,单位为毫秒。
以下引用自博客园原文地址
interpolator指定一个动画的插入器,常见的插入器
@android:anim/accelerate_interpolator: 越来越快
@android:anim/decelerate_interpolator:越来越慢
@android:anim/accelerate_decelerate_interpolator:先快后慢
@android:anim/anticipate_interpolator: 先后退一小步然后向前加速
@android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点
@android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点
@android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点
@android:anim/linear_interpolator:均匀速度。
拿我的这个帖子中的动画来说地址在此
<?xml version="1.0" encoding="utf-8"?>
<set android:interpolator="@interpolator/accelerate_decelerate"
xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:duration="400" android:pivotX="50.0%" android:pivotY="50.0%" android:fromXScale="0.1" android:toXScale="1.0" android:fromYScale="0.1" android:toYScale="1.0" />
<rotate android:duration="400" android:fromDegrees="360.0" android:toDegrees="0.0" android:pivotX="50.0%" android:pivotY="50.0%" android:startOffset="50" />
<alpha android:duration="400" android:fromAlpha="0.0" android:toAlpha="1.0" />
</set>
从桌面打开应用时这个效果就是程序从屏幕中央从0.1倍逐渐扩大后延迟50毫秒再旋转并从全透明到不透明,一个简单的特效就这样做出来了,相信聪明的大家很快就能学会做动画了,这里只是简单的介绍,想要了解更多请自行Google搜索android animation等关键字搜索相关资料。
介绍到此结束,我这里只是抛砖引玉,欢迎大家指正和补充