控制安卓窗口动画的代码是在framework-res.apk文件中的anim文件夹下,说一下整体的思路,打开anim文件编辑里面的xml文件,然后把他们再放回手机里,首先我们要把framework-res.apk提取出来,如果你使用解压缩的办法会发现里边的文件
是乱码,所以文件是需要我们反编译才能编辑。
反编译以及回编译请移步此贴 http://bbs.lidroid.com/forum.php?mod=viewthread&tid=102159&extra=page%3D1%26filter%3Dtypeid%26typeid%3D14%26typeid%3D14
反编译完成以后,我们就可以打开anim文件,浏览里边的代码了。 安卓绘图有4个基本代码
看明白了上面四个代码的意思就可以明白如何修改得到自己喜欢的特效了。
我百度了很多,但是发现很多论坛上这些控制文件的控制对象都说的十分含糊。
经过我很多天的测试,摸索,我把几个文件的控制的特效贴在下边。
dialog_enter 描述的对话框的打开
dialog_close 描述的对话框的关闭 具体就是比如你进入文件管理器,长按一个文件夹,就会弹出那儿对话框,写着各种文件操作,比如复制剪切。
inputmethod_开头的全是控制输入法的
lock_screen_behind_enter
lock_screen_enter
lock_screen_exit
这三个是控制锁屏的,第一个是控制锁屏以后解锁回桌面桌面的变化,第三个是控制解锁一个在桌面上层覆盖的画面的变化情况。
options_panel_enter
options_panel_exit
这两个是控制在桌面时候点击功能键时候的动画。
task_close_enter
task_close_exit
task_open_enter
task_open_exit
这四个是控制任务切换时候的动画,比如你从短信界面切换到qq界面,第一个是程序关闭时另一个程序的进入动画,比如你打开短信,再打开qq,这时候你按返回键,QQ就是被关闭的程序,这时候短信就是另一个程序,他控制了短信的进入特效
第二个是程序关闭退出的特效,就是上文qq退出时候的动画
第三个是程序打开时候程序进入的特效,比如先打开短信,再打开qq,qq进来的特效
第四个是程序打开时,旧程序退出的特效,就是短信退出的特效。
app_starting_exit
这个是程序退出时候的特效。
activity_close_enter
activity_close_exit
activity_open_enter
activity_open_exit
有没有发现这组和上一组很像,要是单纯翻译到中文,你根本区分不了task任务和activity活动的区别,实际上变成里边一个task
包含几个activity,activity是一个应用程序里边的附属的切换页面,我理解的就是手机设置里面那些设置按钮的切换特效。
wallpaper_close_enter
wallpaper_close_exit
wallpaper_open_enter
wallpaper_open_exit
这四个就是控制你启动程序和退出程序时候的效果了,这也是我最初修改动画的目的所在,却是我最后一个才找到的,安卓原生退出特效是一个矩形不断变小,变成一个0.5倍的矩形的过程,我一直觉得为什么不变到0.1倍,0.5呗突然消失总觉得不爽,话不多说言归正传,第一个按文件名理解,壁纸关闭的时候进入的动画,就是你在桌面上启动qq,qq进入平面的动画。
第二个壁纸关闭的时候退出动画,就是你在桌面启动qq,桌面退出时候的动画,第三个壁纸出现时候进入的动画,就是你从qq退出到桌面,桌面显示的动画,最后一个壁纸进入,退出的动画,就是从qq退出到桌面,qq消失的动画。这四个是昨天晚上突然有的灵感,不知道为何以前修改这些都没有效果,差点就因此放弃了。
然而
wallpaper_enter
wallpaper_exit
wallpaper_intra_close_enter
wallpaper_intra_close_exit
wallpaper_intra_open_enter
wallpaper_intra_open_exit
这6个我没读懂,大家谁明白了快点告诉我呀,intra 内部的,那么到底什么是壁纸内部动画特效呢?不得而知了。
例子:
比如你觉得解锁画面太单调了,想来一个缩放特效,那么就打开解锁的控制文件
<?xml version="1.0" encoding="UTF-8"?>
<set android:interpolator="@anim/accelerate_interpolator"
xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:duration="@integer/config_longAnimTime" android:fromAlpha="0.6" android:toAlpha="1.0" />
</set>
前边 android:interpolator是定义动画速率的,然后accelerate_interpolator是加速的意思
看第四行 alpha 透明度 duration 是动画时间的意思 后面="@integer/config_longAnimTime" ,可以把long改成short,或者medium,这些都是在其他文件里定义好的时间,或者干脆改成数字是以毫秒计数的。上面的动画就是说在longanimtime内从0.6的不透明度变化到1的不透明度,我们在这个后面添加以下代码
scale android:duration="@integer/config_longAnimTime" android:pivotX="50.0%" android:pivotY="50.0%" android:fromXScale="2.5" android:toXScale="1.0" android:fromYScale="2.5" android:toYScale="1.0" />
这个函数不用自己写呀,随便打开一个文件自己找的有scale函数的把格式粘过来就行了,深蓝色的部分是定义缩放的中心为屏幕中心,浅蓝色的部分是横坐标的初始尺寸和结束尺寸,后面是纵坐标的初始尺寸和结束尺寸。
关于坐标,经过一些实验我认为是屏幕的左上角是坐标零点,向右为x正方向。向下是y正方向。可是有些代码按这个坐标系就读不太懂了,我也不知道怎么回事。
就这么多吧,把这些编辑好的文件回编译回去测试就行了。