Android XML动画资源文件详细讲解(下)

前言

此篇主要介绍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进行自定义。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨景文Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值