Animation效果控制(一)

该类提供了旋转、移动、伸展和淡出等等效果
1、Alpha——淡入淡出
2、Scale——缩放
3、Rotate——旋转
4、Translate——移动

 

创建Tweened Animations的步骤
1、创建一个AnimationSet对象
2、根据需要创建相应的Animation对象
3、根据软件动画的需求,为Animation对象设置相应的数据
4、将Animation对象添加到AnimationSet对象当中
5、使用控件对象执行AnimationSet

 

private class AlphaButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		//创建一个AnimationSet对象
		AnimationSet animationSet = new AnimationSet(true);
		//创建一个AlphaAnimation对象,1表示完全不透明,0表示透明,从不透明到完全透明
		AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);
		//设置动画执行的时间(单位:毫秒)
		alphaAnimation.setDuration(1000);
		//将AlphaAnimation对象添加到AnimationSet当中
		animationSet.addAnimation(alphaAnimation);
		//使用ImageView的startAnimation方法开始执行动画
		imageView.startAnimation(animationSet);
	}
}

 

private class RotateButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		AnimationSet animationSet = new AnimationSet(true);	/*Animation.RELATIVE_TO_PARENT,相对于父控件,1f表示整个父控件的宽度或者是高度,0.5f表示父控件的高度或者宽度的一半,Animation.RELATIVE_TO_SELF,相对于自身控件,前面两个参数是旋转的角度,后面四个参数用来定义旋转的圆心*/
		RotateAnimation rotateAnimation = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_PARENT, 1f,
				Animation.RELATIVE_TO_PARENT, 0f);
		rotateAnimation.setDuration(5000);
		animationSet.addAnimation(rotateAnimation);
		imageView.startAnimation(animationSet);
	}
}

 

private class ScaleButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		//表示动画效果Interpolator共享
		AnimationSet animationSet = new AnimationSet(true);
		//前四个参数表示从原来大小的100%缩小到10%,后四个参数是为确定“中心点”
		ScaleAnimation scaleAnimation = new ScaleAnimation(1, 0.1f, 1,
				0.1f, Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f);
		animationSet.addAnimation(scaleAnimation);
		//动画效果推迟1秒钟后启动
		animationSet.setStartOffset(1000);
		//如果值为true,控件则保持动画结束的状态
		animationSet.setFillAfter(true);
		//如果值为false,控件则保持动画结束的状态
		animationSet.setFillBefore(false);
		//动画效果重复3次
		//animationSet.setRepeatCount(3);
		animationSet.setDuration(2000);
		imageView.startAnimation(animationSet);
	}
}

 

private class TranslateButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		AnimationSet animationSet = new AnimationSet(true);
		/*前四个参数分别设置X轴的开始位置,设置X轴的结束位置
		后四个参数分别设置Y轴的开始位置,设置Y轴的结束位置*/
		TranslateAnimation translateAnimation = new TranslateAnimation(
				Animation.RELATIVE_TO_SELF, 0f, 
				Animation.RELATIVE_TO_SELF,
				0.5f, Animation.RELATIVE_TO_SELF, 0f,
				Animation.RELATIVE_TO_SELF, 1.0f);
		translateAnimation.setDuration(1000);
		animationSet.addAnimation(translateAnimation);
		imageView.startAnimation(animationSet);
	}
}

 

 利用配置文件xml设置animation(可以复用,类似于CSS样式设定)
1、在res文件夹下面建立一个名为anim的文件夹(控制动画的文件夹)
2、创建xml文件,首先加入set标签
3、在该标签中加入rotate、alpha、scale、translate
4、在代码中使用AnimationUtil当中装载xml文件,并生成Animation对象

 

android:toDegrees="+350" //角度为正角
android:pivotX="50"  //使用绝对位置定位
android:pivotX="50%" //使用相对于控件本身定位
android:pivotX="50%p" //相对于控件的父控件定位

多个效果可以加载到同一个xml文件中,这样可以同时处理多个效果

 

建立文件alpha.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:interpolator="@android:anim/accelerate_interpolator"
	android:shareInterpolator="true">	
	<alpha 
		android:fromAlpha="1.0"
		android:toAlpha="0.0"
		android:startOffset="500"
		android:duration="2000" />
	<rotate android:fromDegrees="0"
		android:toDegrees="360"
		android:pivotX="50%"
		android:pivotY="50%"
		android:duration="2000" />
</set>

 

private class AlphaButtonListener implements OnClickListener {
	@Override
	public void onClick(View view) {
		//使用AnimationUtils装载动画设置文件
//		Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
//		imageView.startAnimation(animation);
		
		//下面的代码和上面的效果是一致的
		AnimationSet animationSet = new AnimationSet(false);
		AlphaAnimation alpha = new AlphaAnimation(1.0f, 0.0f);
		alpha.setInterpolator(new DecelerateInterpolator());
		RotateAnimation rotate = new RotateAnimation(0, 360,
				Animation.RELATIVE_TO_SELF, 0.5f,
				Animation.RELATIVE_TO_SELF, 0.5f);
		rotate.setInterpolator(new AccelerateInterpolator());
		animationSet.addAnimation(alpha);
		animationSet.addAnimation(rotate);
		animationSet.setDuration(2000);
		animationSet.setStartOffset(500);
		imageView.startAnimation(animationSet);
	}
}

 

 Interpolator类定义了动画变化的速率


android:interpolator=""  //设置动画变化速率
android:shareInterpolator="true" //共享动动画变化速率

 

Frame-by-Frame Animations——帧


Drawable序列,这些Drawable可以按照指定的时间间歇一个一个显示

在res/drawable-ldpi目录下创建anim_nv.xml文件

 

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
	android:oneshot="false">
	<item android:drawable="@drawable/nv1" android:duration="500" />
	<item android:drawable="@drawable/nv2" android:duration="500" />
	<item android:drawable="@drawable/nv3" android:duration="500" />
	<item android:drawable="@drawable/nv4" android:duration="500" />
</animation-list>

 

 

private class ButtonListener implements OnClickListener{
	@Override
	public void onClick(View v) {
		imageView.setBackgroundResource(R.drawable.anim_nv);
		AnimationDrawable animationDrawable = (AnimationDrawable)imageView.getBackground();
		animationDrawable.start();
	}
}

 

 

1、LayoutAnimationController用于一个layout里面或是一个ViewGroup里面的控件设置动画效果
2、每个控件都有相同的动画效果
3、这些控件的动画效果在不同的时间显示出来
4、LayoutAnimationController可以在xml文件中设置,也可以在代码中进行设置

posted @ 2011-12-24 09:27  胖鹅  阅读(535)  评论(0编辑  收藏  举报