Android XML动画资源文件详细讲解(下)
2015-09-14 15:55
661 查看
前言
此篇主要介绍Tween Animation(补间动画)和Frame Animation(逐帧动画)的使用。Tween Animation 补间动画
通过旋转、拉伸、移动等方式完成图像的动画效果。语法格式
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@[package:]anim/interpolator_resource" android:shareInterpolator=["true" | "false"] > <alpha android:fromAlpha="float" android:toAlpha="float" /> <scale android:fromXScale="float" android:toXScale="float" android:fromYScale="float" android:toYScale="float" android:pivotX="float" android:pivotY="float" /> <translate android:fromXDelta="float" android:toXDelta="float" android:fromYDelta="float" android:toYDelta="float" /> <rotate android:fromDegrees="float" android:toDegrees="float" android:pivotX="float" android:pivotY="float" /> <set> ... </set> </set>解析说明:
android:interpolator 分类器,主要控制动画播放的类型。android默认的类型有如下几种:
AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator | 在动画开始与结束的地方速率改变比较慢,在中间的时候加速 |
AccelerateInterpolator@android:anim/accelerate_interpolator | 在动画开始的地方速率改变比较慢,然后开始加速 |
AnticipateInterpolator@android:anim/anticipate_interpolator | 开始的时候向后然后向前甩 |
AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator | 开始的时候向后然后向前甩一定值后返回最后的值 |
BounceInterpolator@android:anim/bounce_interpolator | 动画结束的时候弹起 |
CycleInterpolator@android:anim/cycle_interpolator | 动画循环播放特定的次数,速率改变沿着正弦曲线 |
DecelerateInterpolator@android:anim/decelerate_interpolator | 在动画开始的地方快然后慢 |
LinearInterpolator@android:anim/linear_interpolator | 以常量速率改变 |
OvershootInterpolator@android:anim/overshoot_interpolator | 向前甩一定值后再回到原来位置 |
android:pivotX和android:pivotY表示中心点,中心轴。比如旋转中心点或者缩放的中心点。
alpha的属性from和to的取值范围是0.0到1.0。
scale的属性from和to的取值如果是1.0则表示大小不变,<1.0表示缩小,>1.0表示放大。
translate的属性from和to的取值可以是数值或者百分比,数值:比如30,表示移动的30个像素的距离;百分比,比如50%,表示相对于父容器的长宽的百分比。
rotate的属性from和to表示旋转的角度,单位是度。取值从0度到360度,其中android:pivotX和android:pivotY的取值可以是具体数值(相对于父容器top和left的距离值)或者百分比(相对于父容器长宽的百分比)。
使用
我们举一个例子,来学习Tween Animation的具体使用。效果如下:1、res/animator/tween_animation.xml的代码:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/cycle_interpolator"> <rotate android:fromDegrees="0" android:toDegrees="360" android:pivotX="50%" android:pivotY="50%" /> </set>说明:其中interpolator属性设置的是cycle_interpolator,表示在一定的时间内循环播放特定的次数,速率是延着正弦曲线而变化。
rotate表示旋转,从0到360度,中心轴是父容器的正中心(50%,50%)。
2、activity中的代码:
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.tween_animation_view); imageView = (ImageView) findViewById(R.id.imageView); //初始化Animation对象 Animation animation = AnimationUtils.loadAnimation(this, R.animator.tween_animation); animation.setDuration(5000);//动画持续时间 imageView.startAnimation(animation);//播放动画 }
其他
透明度动画:<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha="0" android:toAlpha="1" /> </set>效果:
缩放动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <scale android:fromXScale="0" android:toXScale="2" android:fromYScale="0" android:toYScale="2" android:pivotX="50" android:pivotY="50" /> </set>效果:
移动动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:fromXDelta="0" android:toXDelta="200" android:fromYDelta="0" android:toYDelta="200" /> </set>效果:
Frame Animation逐帧动画
逐帧动画其实很简单,就是降一组图片按照顺序进行播放。语法格式
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot=["true" | "false"] > <item android:drawable="@[package:]drawable/drawable_resource_name" android:duration="integer" /> </animation-list>说明:
android:oneshot取值为true则动画只执行一次,false则循环执行。
使用
1、准备一组图片,如下:2、res/drawable/frame_animation.xml代码:
<?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:drawable="@drawable/logo_loading1" android:duration="200" /> <item android:drawable="@drawable/logo_loading2" android:duration="200" /> <item android:drawable="@drawable/logo_loading3" android:duration="200" /> ... ... ... <item android:drawable="@drawable/logo_loadingN" android:duration="200" /> </animation-list>3、以上frame animation的xml文件定义完成,下面看如何使用:
activity中的代码:
private ImageView imageView; private AnimationDrawable rocketAnimation; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.frame_animation_view); imageView = (ImageView) findViewById(R.id.imageView); //将FrameAnimation赋值给ImageView的bg。 imageView.setBackgroundResource(R.drawable.frame_animation); //获得bg的drawable对象,强制转换为AnimationDrawable rocketAnimation = (AnimationDrawable) imageView.getBackground(); //播放动画 rocketAnimation.start(); }效果:
结束
以上介绍了Tween Animation和Frame Animation的用法。其中关于Tween中提到的Interpolator属性,如果android自带的不能满足要求,我们还可以对interpolator进行自定义。相关文章推荐
- XML 与 JSON 优劣对比
- Gifski:一个跨平台的高质量 GIF 编码器
- As3.0 xml + Loader应用代码
- 模仿动画的放大缩小容器
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#针对xml基本操作及保存配置文件应用实例
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法
- C#中的Linq to Xml详解
- C#操作XML文件实例汇总
- SQL Server中的XML数据进行insert、update、delete
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- 关于SQLServer2005的学习笔记 XML的处理
- C#通过DataSet读写xml文件的方法
- C#实现基于XML配置MenuStrip菜单的方法
- jQuery实现美观的多级动画效果菜单代码
- php xml 入门学习资料