在Android中实现逐帧动画,就是有设计师给出一系列的状态不断变化的图片,开发者可以指定动画中每一帧对应的图片和持续的时间,然后就可以开始播放动画了,可以通过代码和XML资源文件实现:
将处理好的图片放入drawable目录中,在res/drawable 目录新建一个xml文件,在文件中使用标签来定义动画帧序列,使用item标签来定义动画的每一帧,指定帧持续的时间等属性。格式如下:
....
其中 android:onshot 用来控制动画是否循环播放,如果取值为true,表示动画只会播放一次,false表示动画循环播放,
android:duration 用来指定每一帧的播放持续时间。
AnimationDrawable animationDrawable = new AnimationDrawable();
for (int i = 0; i < 10; i++) {
Drawable drawable = context.getResources().getDrawable(
context.getResources().getIdentifier("loading_"+i,"drawable",context.getPackageName()));
animationDrawable.addFrame(drawable,120);
}
imageView.setBackgroundDrawable(animationDrawable);
animationDrawable.setOneShot(false);
代码中帧动画的触发和停止使用:
//获取AnimationDrawable 对象实例,用来控制动画的播放和停止
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
//开始播放动画
animationDrawable.start();
//停止播放动画
animationDrawable.stop();
补间动画是指开发者定义动画的开始和结尾,指定时间和方式,通过在两个关键帧之间插入渐变值来实现过度,从而实现的一种动画效果,主要包括四种基本效果:位移变化(Translate)、透明度变化(Alpha)、大小变化(Scale)、旋转变化(Rotate),这四种效果可以动态组合,从而实现更复杂灵活的动画。
改变位置的动画,创建动画时需要制定动画开始和结束的X,Y 坐标,以及动画的持续时间
直接在代码中使用TranslateAnimation:
TranslateAnimation animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,2f,
Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,2f);
animation.setDuration(2000);
animation.setFillAfter(true);//执行结束之后停留不动
animation.setRepeatMode(Animation.REVERSE);//设置重复的模式
animation.setRepeatCount(1);//设置动画的执行次数为1次
imageView.setAnimation(animation);
通过AnimationUtils 加载xml动画:
Animation animation = AnimationUtils.loadAnimation(this,R.anim.translate_anim);
imageView.startAnimation(animation);
缩放大小的动画,创建动画需制定开始和结束的在X和Y轴的缩放比例,以及动画时间,同时指定缩放的中心点
ScaleAnimation animation = new ScaleAnimation(1.0f,4.0f,1.0f,4.0f,2.0f,2.0f);
animation.setDuration(2000);
animation.setFillAfter(true);
imageView.setAnimation(animation);
改变透明度的动画,创建需制定动画开始和结束的透明度和动画时间,透明度取值范围 0–1
AlphaAnimation animation = new AlphaAnimation(0,1);
animation.setDuration(2000);
animation.setFillAfter(true);
imageView.setAnimation(animation);
旋转动画,创建是需指定动画的开始和结束的旋转角度,动画时间,同时要指定旋转的中心点,即旋转坐标
RotateAnimation animation = new RotateAnimation(0,720,0.5f,0.5f);
animation.setDuration(2000);
animation.setFillAfter(true);
imageView.setAnimation(animation);