您的位置:首页 > 移动开发 > Android开发

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:shareInterpolator  取值为true的时候,表示设置的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进行自定义。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息