动画(Animation)

Android提供了2种动画:

1> Tween动画,通过对 View 的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:

动画的类型

Xml定义动画使用的配置节点

编码定义动画使用的类

渐变透明度动画效果

AlphaAnimation

渐变尺寸缩放动画效果

ScaleAnimation

画面位置移动动画效果

TranslateAnimation

画面旋转动画效果

RotateAnimation

 

2> Frame动画,即顺序播放事先做好的图像,跟放胶片电影类似。开发步骤:

1)把准备好的图片放进项目res/ drawable下。

2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。

3)为View控件绑定动画效果。调用代表动画的AnimationDrawablestart()方法开始动画。

常用:

TranslateAnimation animation = new TranslateAnimation(0, 0,0, -700);
animation.setDuration(10);//设置动画持续时间
//animation.setRepeatCount(2);//设置重复次数
animation.setFillAfter(true);
mChildOfContent.startAnimation(animation);


ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f,
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setFillAfter(true);
logoImageView.startAnimation(scaleAnimation);

例子(未整理)

本例要实现对ImageView对象进行渐变尺寸缩放动画效果
1> 在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义,如:scale.xml,内容如下:

  
     

动画的进度使用interpolator控制,android提供了几个Interpolator 子类,实现了不同的速度曲线,如LinearInterpolator实现了匀速效果、Accelerateinterpolator实现了加速效果、DecelerateInterpolator实现了减速效果等。还可以定义自己的Interpolator子类,实现抛物线、自由落体等物理效果。

fromXScale(浮点型) 属性为动画起始时X坐标上的缩放尺寸 
fromYScale(浮点型) 属性为动画起始时Y坐标上的缩放尺寸
toXScale(浮点型)   属性为动画结束时X坐标上的缩放尺寸
toYScale(浮点型)   属性为动画结束时Y坐标上的缩放尺寸
说明: 以上四种属性值 
0.0表示收缩到没有 
1.0表示正常无缩放
值小于1.0表示收缩 
值大于1.0表示放大
pivotX(浮点型)     属性为动画相对于物件的X坐标的开始位置 
pivotY(浮点型)     属性为动画相对于物件的Y坐标的开始位置 
说明: 
以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置
duration(长整型)属性为动画持续时间 。说明:   时间以毫秒为单位
fillAfter(布尔型)属性当设置为true,该动画转化在动画结束后被应用

2> 在layout文件添加节点:




说明:除了可以对实现动画效果,其实也可以对其他View实现动画效果,如:

3>在Activity里对ImageView使用前面定义好的动画效果:
public class AnimationActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView)this.findViewById(R.id.imageView);
		//加载动画XML文件,生成动画指令
		Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
		//开始执行动画
		imageView.startAnimation(animation);
	}
}

备注:上面采用的是xml文件定义动画效果,作为代替,也可以采用编码方式实现。下面采用编码方式实现上述例子同样的效果:
public class AnimationActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView)this.findViewById(R.id.imageView);
		ScaleAnimation animation = new ScaleAnimation(0.0f, 5f, 0.0f, 5f, 
		Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
		animation.setDuration(5000); //设置持续时间5秒
		animation.setFillAfter(true);//让图片保持动画结束点时的状态
		imageView.startAnimation(animation);
	}
}


其他动画效果定义例子:
=================渐变透明度动画效果======================


	

编码实现透明度动画效果:
public class AnimationActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView)this.findViewById(R.id.imageView);
		AlphaAnimation animation = new AlphaAnimation(0.1, 1.0); 
		animation.setDuration(5000); //设置持续时间5秒
		imageView.startAnimation(animation);
	}
}

=================画面位置移动动画效果======================






编码实现位置移动动画效果:
public class AnimationActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView)this.findViewById(R.id.imageView);
		TranslateAnimation animation = new TranslateAnimation(0, 120, 0, 120); 
		animation.setDuration(5000); //设置持续时间5秒
		imageView.startAnimation(animation);
	}
}

=================画面旋转动画效果======================






编码实现:
RotateAnimation animation = new RotateAnimation(0, -90, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(500);
imageView.startAnimation(animation);

=====================  Frame动画例子  ===============================
(1)把准备好的图片放进项目res/ drawable下。
   图片有:girl_1.gif, girl_2.gif, girl_3.gif
(2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义,如:frame.xml。


    
    
    

上面的XML就定义了一个Frame动画,其包含3帧动画,3帧动画中分别应用了drawable中的3张图片:girl_1.gif, girl_2.gif, girl_3.gif,每帧动画持续200毫秒。android:oneshot属性如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。
(3)为View控件绑定动画效果,调用代表动画的AnimationDrawable的start()方法开始动画。
public class FrameActivity extends Activity {
	private AnimationDrawable animationDrawable;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		ImageView imageView = (ImageView)this.findViewById(R.id.imageView);
		imageView.setBackgroundResource(R.anim.frame);
		animationDrawable = (AnimationDrawable) imageView.getBackground();
	}
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		  if (event.getAction() == MotionEvent.ACTION_DOWN) {//按下
			  animationDrawable.start();
			  return true;
		  }
		  return super.onTouchEvent(event);
	}
}
有一点需要强调的是:启动Frame动画的代码animationDrawable.start();不能应用在OnCreate()方法中,因为在OnCreate()中 AnimationDrawable还没有完全的与ImageView绑定。在OnCreate()中启动动画,只能看到第一张图片。这里在触摸事件中实现的。





 

你可能感兴趣的:(android-view)