转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38366081
xml文件中的属性在代码中都有详细的解释,这里就不重复说明了。定义完XML文件后,然后在代码中使用AnimationUtils类调用loadAnimation(context, id)方法来加载xml文件,具体代码如下:
/**
* xml文件加载图片渐变(Alpha)动画
*/
Animation mAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation_alpha);
/**
* 代码创建图片渐变(Alpha)动画
* 实例化AlphaAnimation对象:
* mAnimation = new AlphaAnimation(fromAlpha, toAlpha);
* fromAlpha:设置动画开始时控件的透明度,0.0为透明,控件不显示,1.0为不透明,控件全部显示
* toAlpha:设置动画结束时的控件的透明度
*/
Animation mAnimation = new AlphaAnimation(0.0f, 1.0f);
分别使用xml和代码实现Alpha动画后,最后我们为一个ImageView对象设置我们创建好的Alpha动画,ImageView对象只需要调用startAnimation(Animation animation)方法,将刚刚创建好的alpha动画对象作为参数添加传进去搞定,具体代码如下:
ImageView mImageView = (ImageView)findViewById(R.id.view_animation_imageview);
//设置控件开始执行动画
mImageView.startAnimation(mAnimation);
然后在代码中使用AnimationUtils类调用loadAniamtion(context,id)方法加载xml文件,具体代码如下:
/**
* xml文件加载图片缩放(Scale)动画
*/
mAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation_scale);
上面是使用xml实现Scale的动画效果,下面我们来看看如何在代码中实现Scale的动画,很简单,只需要实例化一个ScaleAnimation对象,然后传递相关参数就行,具体代码如下:
Animation mAnimation = null;
/**
* 代码创建图片渐变(Scale)动画
* mAnimation = new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue);
* fromX:设置动画开始时X轴方向的缩放起始值。0.0为X轴方向的控件缩成一点,1.0为X轴方向的控件不缩放;
* toX:设置动画结束时X轴方向的缩放结束值;
* fromY:设置动画开始时Y轴方向的缩放起始值。0.0为Y轴方向的控件缩成一点,1.0为Y轴方向的控件不缩放;
* toY:设置动画结束时Y轴方向的缩放结束值;
* pivotXtype:动画在X轴相对于物件位置类型 ,分为RELATIVE_TO_SELF、RELATIVE_TO_PARENT和ABSOLUTE三种类型:
* 1、RELATIVE_TO_SELF:相对于控件自身;
* 2、RELATIVE_TO_PARENT:相对于父控件;
* 3、ABSOLUTE:绝对坐标;
* pivotXValue:动画相对于物件的X坐标的开始位置;
* pivotYType:动画在Y轴相对于物件位置类型 ,分为RELATIVE_TO_SELF、RELATIVE_TO_PARENT和ABSOLUTE三种类型;
* pivotYValue:动画相对于物件的Y坐标的开始位置;
*/
//mAnimation = new ScaleAnimation(fromX, toX, fromY, toY)
//mAnimation = new ScaleAnimation(fromX, toX, fromY, toY, pivotX, pivotY)
//mAnimation = new ScaleAnimation(fromX, toX, fromY, toY, pivotXType, pivotXValue, pivotYType, pivotYValue)
mAnimation = new ScaleAnimation(0.0f, 1.0f, 0.5f, 1.0f, Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 1.0f);
接下来就是为ImageView加载动画并开启动画,实现代码如上面为Imageview加载Alpha动画的代码一样,在这里就不重复列出,具体详细代码可以下载文章末尾的代码进行学习。最后我们运行程序,操作效果图如图下:
//xml文件加载图片位置位移(Translate)动画
mAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation_translate);
上面是使用xml实现Translate的动画效果,下面我们来看看如何在代码中实现Translate的动画,很简单,只需要实例化一个TranslateAnimation对象,然后传递相关参数就行,具体代码如下:
Animation mAnimation = null;
/**
* 代码创建图片位置位移(Translate)动画
* mAnimation = new TranslateAnimation(fromXType, fromXValue, toXType, toXValue, fromYType,
* fromYValue, toYType, toYValue);
* fromXType:动画开始执行时在X轴相对于物件位置类型
* fromXValue:动画开始执行时X轴方向的的起始位置,当位置类型为RELATIVE_TO_SELF时,Value取0.0f~1.0f之间,
* 当位置类型为RELATIVE_TO_PARENT或ABSOLUTE时, Value使用(px)像素值
* toXType:动画结束执行时在X轴相对于物件位置类型
* toXValue:动画结束执行时X轴方向的的结束位置,Value取值方式同上
* fromYType:动画开始执行时在Y轴相对于物件位置类型
* fromYValue:动画开始执行时Y轴方向的的起始位置,Value取值方式同上
* toYType:动画在结束执行时在Y轴相对于物件位置类型
* toYValue:动画结束执行时Y轴方向的的结束位置,Value取值方式同上
*/
//mAnimation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
mAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f);
最后我们运行程序,操作效果图如图下:
然后在代码中使用AnimationUtils类调用loadAniamtion(context,id)方法加载xml文件,具体代码如下:
/**
* xml文件加载图片旋转(Rotate)动画
*/
mAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation_rotate);
上面是使用xml实现Rotate的动画效果,下面我们来看看如何在代码中实现
Rotate
的动画,很简单,只需要实例化一个RotateAnimation对象,然后传递相关参数就行,具体代码如下:
Animation mAnimation = null;
/**
* 代码创建图片旋转(Rotate)动画
* mAnimation = new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue);
* fromDegrees:动画开始执行时的控件起始状态的角度;
* toDegrees:动画结束执行时的控件结束状态的角度;
* pivotXType:动画在X轴相对于物件位置类型 ,分为RELATIVE_TO_SELF、RELATIVE_TO_PARENT和ABSOLUTE三种类型:
* 1、RELATIVE_TO_SELF:相对于控件自身;
* 2、RELATIVE_TO_PARENT:相对于父控件;
* 3、ABSOLUTE:绝对坐标;
* pivotXValue:动画开始执行时X轴方向的的起始位置,当位置类型为RELATIVE_TO_SELF时,Value取0.0f~1.0f之间,当位置类型为RELATIVE_TO_PARENT或ABSOLUTE时,
* Value使用(px)像素值;
* pivotYType:动画在Y轴相对于物件位置类型 ,分为RELATIVE_TO_SELF、RELATIVE_TO_PARENT和ABSOLUTE三种类型;
* pivotYValue:旋转动画的中心店的Y轴方向的纵坐标,原理同上;
*/
//mAnimation = new RotateAnimation(fromDegrees, toDegrees)
//mAnimation = new RotateAnimation(fromDegrees, toDegrees, pivotX, pivotY)
mAnimation = new RotateAnimation(-50f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
最后我们运行程序,操作效果图如图下:
查看上面代码,我们可以使用一个/**
* xml文件加载图片集合(Set)动画
*/
mAnimation = AnimationUtils.loadAnimation(this, R.anim.view_animation_set);
上面是使用xml实现Set集合动画效果,下面我们来看看如何在代码中实现Set集合
动画,具体代码如下:
/**
* 代码创建图片集合(Set)动画
*/
AnimationSet mAnimationSet = new AnimationSet(true);
//定义渐变动画对象
AlphaAnimation mAlphaAnimation = new AlphaAnimation(1.0f, 0.0f);
mAlphaAnimation.setRepeatCount(1);
mAlphaAnimation.setRepeatMode(Animation.REVERSE);
mAlphaAnimation.setFillAfter(true);
mAlphaAnimation.setDuration(1000);
//定义缩放动画对象
ScaleAnimation mScaleAnimation = new ScaleAnimation(1.0f, 0.0f, 1.0f, 0.0f,
Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
mScaleAnimation.setRepeatCount(1);
mScaleAnimation.setRepeatMode(Animation.REVERSE);
mScaleAnimation.setFillAfter(true);
mScaleAnimation.setDuration(1000);
//定义位移动画对象
TranslateAnimation mTranslateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f, Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 1.0f);
mTranslateAnimation.setRepeatCount(1);
mTranslateAnimation.setRepeatMode(Animation.REVERSE);
mTranslateAnimation.setFillAfter(true);
mTranslateAnimation.setDuration(1000);
//定义旋转动画对象
RotateAnimation mRotateAnimation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
mRotateAnimation.setRepeatCount(1);
mRotateAnimation.setRepeatMode(Animation.REVERSE);
mRotateAnimation.setFillAfter(true);
mRotateAnimation.setDuration(1000);
//添加动画到集合动画对象中
mAnimationSet.addAnimation(mAlphaAnimation);
mAnimationSet.addAnimation(mScaleAnimation);
mAnimationSet.addAnimation(mTranslateAnimation);
mAnimationSet.addAnimation(mRotateAnimation);
最后我们运行程序,操作效果图如图下:
上面代码中,我们将刚准备好的图片使用public class LoadingRobotProgressView extends ImageView {
private AnimationDrawable mAnimationDrawable;
public LoadingRobotProgressView(Context context) {
super(context);
// TODO Auto-generated constructor stub
init();
}
public LoadingRobotProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
init();
}
public LoadingRobotProgressView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
init();
}
private void init() {
//设置背景
this.setBackgroundResource(R.drawable.drawable_animation_robot);
//获取当前的背景
mAnimationDrawable = (AnimationDrawable) this.getBackground();
}
/**
* 当进入当前窗口时,开启动画
*/
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mAnimationDrawable.start();
}
/**
* 当离开当前窗口时,关闭动画
*/
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mAnimationDrawable.stop();
}
}
好了,所有的编码工作都做完了,下面我们来运行一下程序,看一下具体的效果,如图下: