Android开发(26)--补间动画(Tween)的实现

补间动画(Tween Animation)

补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。 目前Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。

AlphaAnimation:透明度(alpha)渐变效果,对应标签。

TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应标签。

ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应标签。

RotateAnimation:旋转渐变,可以指定旋转的参考点,对应标签。

AnimationSet:组合渐变,支持组合多种渐变效果,对应标签。

补间动画的效果同样可以使用XML语言来定义,这些动画模板文件通常会被放在Android项目的res/anim/目录下。

下面是具体实现源码:

MainActivity.java封装实现的方法:

package com.example.lesson19_tween;

import com.example.lesson19_tween.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;

public class MainActivity extends Activity {

	private ImageView imageView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		imageView = (ImageView) findViewById(R.id.imageView1);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	// 透明动画
	public void alphaImpl(View v) {

		Animation animation = AnimationUtils.loadAnimation(this,
				R.anim.alpha_demo);
		imageView.startAnimation(animation);
	}

	// 旋转动画
	public void rotateImpl(View v) {
		Animation animation = AnimationUtils.loadAnimation(this,
				R.anim.rotate_demo);
		imageView.startAnimation(animation);
	}

	// 缩放动画
	public void scaleImpl(View v) {
		Animation animation = AnimationUtils.loadAnimation(this,
				R.anim.scale_demo);
		imageView.startAnimation(animation);
	}

	// 移动效果
	public void translateImpl(View v) {
		// XML文件
		Animation animation = AnimationUtils.loadAnimation(this,
				R.anim.translate_demo);

		animation.setRepeatCount(Animation.INFINITE);//循环显示
		imageView.startAnimation(animation);

		/*
		 * 第一种 imageView.setAnimation(animation); animation.start();
		 */
		// 第二种

		// Java代码
		/*
		 * TranslateAnimation translateAnimation = new TranslateAnimation(0,
		 * 200, 0, 0); translateAnimation.setDuration(2000);
		 * imageView.startAnimation(translateAnimation);
		 */
	}

	// 综合实现set_demo.xml中的动画
	public void setAll(View v) {
		Animation animation = AnimationUtils.loadAnimation(this,
				R.anim.set_demo);
		imageView.startAnimation(animation);
	}
	
}

alpha_demo.xml


 

rotate_demo.xml


scale_demo.xml




translate_demo.xml

 
    

set_demo.xml



    

    

    

    

    


布局文件:



    
效果如下:
Android开发(26)--补间动画(Tween)的实现_第1张图片

在实际项目中,我们经常使用补间动画,原因是补间动画使用起来比较方便,功能也比逐帧动画强大不少,而且还可以很方便地进行动画叠加,实现更加复杂的效果。实际上,set_demo.xml中的标签对应的就是AnimationSet类,即“动画集合”的概念,支持加入多种动画效果,如渐变动画(alpha)、大小动画(scale),线性动画(translate)等。另外,在Android系统中,所有与动画相关的类都归类在android.view.animation包之下,大家可以参考SDK文档进行进一步学习。

至此,我们已经初步了解了如何在Android系统中使用各种动画效果,包括逐帧动画和补间动画。显而易见的是,在Android平台之上,开发者们可以很方便地使用各种动画效果来为应用产品增色。

 
 

你可能感兴趣的:(java,Android开发,面试,Java,补间动画,Android开发,Tween)