视图动画配置XML实现

概述:

Android的视图动画由5种类型组成:
alpha:                                              渐变透明度动画效果
scale:                                               渐变尺寸伸缩动画效果
translate:                                         画面变换位置移动动画效果
rotate:                                             画面转移旋转动画效果
set:                                                  定义动画集

动画文件存放位置:

res/anim文件夹下,访问时使用R.anim.XXX
也可以放在res/drawable,访问时使用R.drawable.XXX

5个类型的属性:

1.通用属性:

这些属性在Animation类里,其它5个类都继承自该类

android:duration:                                       动画总持续时间,以毫秒为单位
android:fillAfter:                                         如果为true,动画结束时,保持动画结束时的状态
android:fillBefore:                                       如果为true,动画结束时,还原到初始状态
android:fillEnabled:                                     如果为true,动画结束时,还原到初始状态
Android:repeatCount:                              动画重复次数,当值为infinite时,表示无循环
android:repeatMode:                                 设定重复类型,有reverse和restart两个值,reverse表示倒叙回放,restart表示重放,并且必须与-repeatCount一起使用才有效果
android:interpolator:                                  设定插值器,就是指动画效果,比如弹跳效果等

属性设置无效的问题

2.scale标签:

功能说明:
scale标签用于缩放动画,可以实现动态调整控件尺寸的效果

该标签有以下属性:
android:fromXScale="XXX"                           动画起始时,控件在X轴的大小(相对自身的缩放比例,浮点值(结尾不能加f),1.0代表自身无变化,0.5代表缩小,2.0代表放大) 
android:toXScale="XXX"                               动画结束时,控件在X轴的大小(相对自身的缩放比例,浮点值)
android:fromYScale="XXX"                           动画起始时,控件在Y轴的大小(相对自身的缩放比例,浮点值)         
android:toYScale="XXX"                               动画结束时,控件在Y轴的大小(相对自身的缩放比例,浮点值)      
android:pivotX="XXX"                                  
X轴的起始位置,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前视图的原点(左上角为原点)加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%            
android:pivotY="XXX"                                  
Y轴的起始位置,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%       

示例:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
       android:fromXScale="1.0"
       android:toXScale="0.4"
       android:fromYScale="1.2"
       android:toYScale="0.6"
       android:pivotX="50%"
       android:pivotY="50%"
       android:duration="700"
       android:fillBefore="true"
       android:repeatCount="1"
       android:repeatMode="reverse"
        />

效果图:

点击回弹的合理效果:

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="200"
    android:fillBefore="true"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="1"
    android:repeatMode="reverse"
    android:toXScale="0.9"
    android:toYScale="0.9" />

3.alpha标签:

功能说明:
用于实现渐变透明度动画效果

该标签有以下属性:
android:fromAlpha:                               动画开始时的透明度,取值范围0.0~1.0,0.0表示全透明,1.0表示不透明
android:toAlpha:                                   动画结束时的透明度,取值范围0.0~1.0,0.0表示全透明,1.0表示不透明

示例:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:fromAlpha="1.0"
       android:toAlpha="0.1"
       android:duration="3000"
       android:fillBefore="true">
</alpha>

效果图:

4.rotate标签:

功能说明:
用于实现画面转移旋转动画效果

该标签有以下属性:
android:fromDegrees:                               动画开始时的角度位置,正值代表顺时针方向的度数,负值代表逆时针方向的度数
android:toDegrees:                                   动画结束时的角度位置,正值代表顺时针方向的度数,负值代表逆时针方向的度数
android:pivotX:                                         旋转中心点X轴坐标,默认旋转中心点是控件坐标原点,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点(左上角)加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:pivotY:                                         旋转中心点Y轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%

示例:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
        android:fromDegrees="0"
        android:toDegrees="-650"
        android:duration="3000"
        android:fillAfter="true">
</rotate>

效果图:

5.translate标签:

功能说明:
用于实现画面变换位置移动动画效果

该标签有以下属性:
android:fromXDelta:                                 起始点X轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的X轴原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:fromYDelta:                                 起始点Y轴坐标,支持三种样式,比如:50/50%/50%p,如果是数值,则在当前控件视图的Y轴原点加上50px,如果是50%则在原点加上自己宽度的50%,如果是50%p则在原点加上父控件宽度的50%
android:toXDelta:                                      终点X轴坐标
android:toYDelta:                                      终点Y轴坐标

示例:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
           android:fromXDelta="0"
           android:toXDelta="-80"
           android:fromYDelta="0"
           android:toYDelta="-80"
           android:duration="2000">
</translate>

效果图:

6.set标签:

功能说明:
前面4个标签只能完成特定功能,而set标签可以把这些动画效果组合起来

属性:
set标签本身没有属性,它的属性都是从Animation类继承而来的,当这些属性用于set标签时,就会对set标签下的所有子控件产生作用
注意:在set标签中设置repeateCount属性是无效的,必须对每个动画单独设置才有效

示例:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:duration="3000"
     android:fillAfter="true">
    <alpha
            android:fromAlpha="0.0"
            android:toAlpha="1.0"/>
    <scale
            android:fromXScale="0.0"
            android:toXScale="1.4"
            android:fromYScale="0.0"
            android:toYScale="1.4"
            android:pivotX="50%"
            android:pivotY="50%"/>
    <rotate
            android:fromDegrees="0"
            android:toDegrees="720"
            android:pivotX="50%"
            android:pivotY="50%"/>
</set>

效果图:

实例:

xml动画实例

使用动画文件:

功能说明:
发起命令让开始动画

1.加载动画文件:

构造函数:
AnimationUtils:public static Animation loadAnimation(Context context, int id)

参数:
context:                                context上下文
id:                                         动画资源文件

示例:
Animation setAnim = AnimationUtils.loadAnimation(AnimationXMLActivity.this,R.anim.setanim);

2.使用动画文件:

构造函数:
View:public void startAnimation(Animation animation)

参数:
animation:                                动画资源

示例:
Animation setAnim = AnimationUtils.loadAnimation(AnimationXMLActivity.this,R.anim.setanim);
继承自View的控件对象.startAnimation(scaleAnim);

给Activity设置启动和finish动画:

一定要放在跳转Activity之后(紧挨着StartActivity后面)
overridePendingTransition(R.anim.dynamic_preview_enter,R.anim.dynamic_preview_exit);
退出动画在对应的Activity里重写finish方法:
    @Override
    public void finish() {
        super.finish();
       overridePendingTransition(R.anim.dynamic_preview_enter,R.anim.dynamic_preview_exit);
    }

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值