Android 动画机制(一)

Android 动画机制(一)

1.逐帧动画(Frame Animation)

    在Android中实现逐帧动画,就是有设计师给出一系列的状态不断变化的图片,开发者可以指定动画中每一帧对应的图片和持续的时间,然后就可以开始播放动画了,可以通过代码和XML资源文件实现:

  • 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();

2.补间动画(Tween Animation)

补间动画是指开发者定义动画的开始和结尾,指定时间和方式,通过在两个关键帧之间插入渐变值来实现过度,从而实现的一种动画效果,主要包括四种基本效果:位移变化(Translate)、透明度变化(Alpha)、大小变化(Scale)、旋转变化(Rotate),这四种效果可以动态组合,从而实现更复杂灵活的动画。

  • TranslateAnimation

改变位置的动画,创建动画时需要制定动画开始和结束的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);
  • ScaleAnimation

缩放大小的动画,创建动画需制定开始和结束的在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);
  • AlphaAnimation

改变透明度的动画,创建需制定动画开始和结束的透明度和动画时间,透明度取值范围 0–1

  
    
        AlphaAnimation animation = new AlphaAnimation(0,1);
        animation.setDuration(2000);
        animation.setFillAfter(true);
        imageView.setAnimation(animation);
  • RotateAnimation

旋转动画,创建是需指定动画的开始和结束的旋转角度,动画时间,同时要指定旋转的中心点,即旋转坐标

     
        RotateAnimation animation = new RotateAnimation(0,720,0.5f,0.5f);
        animation.setDuration(2000);
        animation.setFillAfter(true);
        imageView.setAnimation(animation);

重点:补间动画不会改变真实的坐标。

你可能感兴趣的:(笔记,android)