Android UI - Framework Anim XML

276 阅读4分钟

一、 Xml 理解

1. XML 清单

# anim 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            #选项菜单弹出

1.1 wallpaper 系列动画理解

这个系列一共有 4 个文件, 分别是

  • wallpaper_close_enter.xml 壁纸退出时进入的动画,就是比如你从桌面上启动QQ时,QQ界面进入前台的动画;
  • wallpaper_close_exit.xml 壁纸退出时的退出动画,就是从桌面启动QQ时,桌面退出(其实是桌面进入后台)的动画;
  • wallpaper_open_enter.xml 壁纸打开时候进入的动画,就是从QQ返回到桌面时, 桌面进入前台的动画;
  • wallpaper_open_exit.xml 壁纸打开时退出的动画,就是从QQ返回到桌面时, QQ消失的动画.

1.2 acitivty 系列动画理解

这个系列一共有 4 个文件, 分别是

  • activity_close_enter.xml
  • activity_close_exit.xml
  • activity_open_enter.xml
  • activity_open_exit.xml

属于应用内部的 Activity 切换动画, 通常是一级 Activity 启动二级三级 Acitivty. 反之回退上一级 Activity 的动画效果.

1.3 task 系列动画理解

这个系列一共有 4 个文件, 分别是

  • task_close_enter.xml
  • task_close_exit.xml
  • task_open_enter.xml
  • task_open_exit.xml

属于 A 应用跳转到 B 应用时调用的动画效果 值得注意的是这个系列的动画效果, 会根据不同的设备尺寸选择对应的效果

  • /res/anim-land
  • /res/anim-port
  • /res/anim-sw720dp

这三个文件夹下都存在.

二、XML 标签定义说明

2.1 Animation 动画

Tween Animation 提供四种效果 旋转、移动、伸展 和 渐变

  • Alpha (透明渐变)
  • Scale (缩放)
  • Translate (移动)
  • Rotate (旋转)

每个动画效果均有各自的语法,统一放置于 /res/anim 目录下,文件名作为资源 ID 引用。

XML文件中必须有一个根元素,可以是、、、中的任意一个, 也可以是来管理一个由前面几个元素组成的动画集合。

2.2 坐标概念

img

img

从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,

  • 当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1),
  • 当X轴值为0%p时,刚好再屏幕内(位置2),
  • 当X=100%p时刚好在屏幕右边(位置3)。

2.3 Set 标签

一个动画容器,管理多个动画的群组,与之相对应的 Java 对象是 AnimationSet.

它有两个属性:

  1. android:interpolator代表 一个插值器资源, 可以引用系统自带插值器资源,也可以用自定义插值器资源,默认值是匀速插值器。
  2. android:shareInterpolator代表里面的多个动画是否要共享插值器,默认值为true,即共享插值器,如果 设置为false,那么的插值器就不再起作用,我们要在每个动画中加入插值器。

补充知识:

插值器(Interpolator),是设置动画运行过程中的变化规律,类似匀速变化,加速变化,回弹等。

动画是开发者给定开始和结束的“关键帧”,其变化的“中间帧”是有系统计算决定然后播放出来。因此,动画的每一帧都将在开始和结束之间的特定时间显示。此时动画时间被转换为时间索引,则动画时间轴上的每个点都可以转换成0.0到1.0之间的一个浮点数。然后再将该值用于计算该对象的属性变换。在变换的情况下,y轴上,0.0对应于起始位置,1.0对应于结束位置,0.5对应于起始和结束之间的中间,对于一些插值器其值还可以是0~1之外的数值。

<!-- 例子 -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 位移 -->
    <translate
        android:fromXDelta="-100%p"
        android:toXDelta="0"
        android:fromYDelta="0"
        android:toYDelta="0"
        android:duration="375"
        android:interpolator="@android:interpolator/decelerate_cubic">
    </translate>
    
    <!-- 缩放 -->
    <scale
        android:fromXScale="0.95"
        android:toXScale="1.0"
        android:fromYScale="0.95"
        android:toYScale="1.0"
        android:pivotX="50%p"
        android:pivotY="50%p"
        android:duration="600"
        android:interpolator="@android:interpolator/decelerate_cubic"
        >
    </scale>
    
    <!-- 渐变 -->
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
           android:interpolator="@interpolator/accelerate_cubic"
           android:fillEnabled="true"
           android:fillBefore="true" android:fillAfter="true"
           android:duration="280"/>
</set>

Animation Alpha 语法

实现 fadeIn(渐入) 和 fadeOut(渐出) 的效果,与之对应的 Java 类是 AlphaAnimation .

属性含义取值单位补充
android:fromAlpha代表起始alpha值0.0 ~ 1.0浮点值代表透明和完全不透明
android:toAlpha代表结尾alpha值0.0 ~ 1.0浮点值代表透明和完全不透明

Animation Scale 语法

实现 动态调控件尺寸 的效果,与之对应的 Java 类是 ScaleAnimation.

细节参考: blog.csdn.net/qq_33443989…

总结:

我们想要不同的动画切换效果,可以修改对应的xml文件来实现。