三种基本动画

三种基本动画

1. 帧动画(Drawable Animation)

首先在res/anim下建立一个frame.xml来存放帧动画

  
   
      
      
      
      
      
      
      
      
      
      
          
  

布局文件中

 

类代码中

AnimationDrawable  animationDrawable=(AnimationDrawable) imageView1.getBackground();  

if(!animationDrawable.isRunning()){  
    animationDrawable.start();  
}  

2. 补间动画(Tween Animation)

不会改变控件真实的坐标

补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的。补间动画的优点是可以节省空间。目前 Android应用框架支持的补间动画效果有以下5种。具体实现在android.view.animation类库中。

AlphaAnimation:透明度(alpha)渐变效果,对应标签。

TranslateAnimation:位移渐变,需要指定移动点的开始和结束坐标,对应标签。

ScaleAnimation:缩放渐变,可以指定缩放的参考点,对应标签。

RotateAnimation:旋转渐变,可以指定旋转的参考点,对应标签。

AnimationSet:组合渐变,支持组合多种渐变效果,对应标签。

实现Demo

动画定义在Xml中

 // 透明动画  
public void alphaImpl(View v) {  

    Animation animation = AnimationUtils.loadAnimation(this,  
            R.anim.alpha_demo);  
    imageView.startAnimation(animation);  
}  

// 旋转动画  
public void rotateImpl(View v) {  
    Animation animation = AnimationUtils.loadAnimation(this,  
            R.anim.rotate_demo);  
    imageView.startAnimation(animation);  
}  

// 缩放动画  
public void scaleImpl(View v) {  
    Animation animation = AnimationUtils.loadAnimation(this,  
            R.anim.scale_demo);  
    imageView.startAnimation(animation);  
}  

// 移动效果  
public void translateImpl(View v) {  
    // XML文件  
    Animation animation = AnimationUtils.loadAnimation(this,  
            R.anim.translate_demo);  

    animation.setRepeatCount(Animation.INFINITE);//循环显示  
    imageView.startAnimation(animation);  

    /* 
     * 第一种 imageView.setAnimation(animation); animation.start(); 
     */  
    // 第二种  

    // Java代码  
    /* 
     * TranslateAnimation translateAnimation = new TranslateAnimation(0, 
     * 200, 0, 0); translateAnimation.setDuration(2000); 
     * imageView.startAnimation(translateAnimation); 
     */  
}  

// 综合实现set_demo.xml中的动画  
public void setAll(View v) {  
    Animation animation = AnimationUtils.loadAnimation(this,  
            R.anim.set_demo);  
    imageView.startAnimation(animation);  
}  

alpha_demo.xml

  
   

rotate_demo.xml

  
 

scale_demo.xml

  

  

translate_demo.xml

   

  

set_demo.xml

  

      

      

      

      

  

代码实现动画

AlphaAnimation

public void click2(View v) {

        //fromDegrees开始旋转的角度 
//      RotateAnimation ra = new RotateAnimation(0, 360);
        //0.5的意思是 控件的宽*0.5
        RotateAnimation ra = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,  Animation.RELATIVE_TO_SELF, 0.5f);
        ra.setDuration(2000);
        ra.setRepeatCount(1);//设置动画执行重复的次数
        ra.setRepeatMode(Animation.REVERSE);
        //iv开始执行动画 
        iv.startAnimation(ra);
    }

RotateAnimation

public void click2(View view) {
    RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f,  Animation.RELATIVE_TO_SELF, 0.5f);
    animation.setRepeatCount(5);
    animation.setRepeatMode(RotateAnimation.RESTART);
    animation.setDuration(2000);
    lv.startAnimation(animation);
}

ScaleAnimation

public void click3(View view) {
    ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f);
    scaleAnimation.setDuration(2000);
    scaleAnimation.setRepeatCount(2);
    scaleAnimation.setRepeatMode(Animation.REVERSE);
    lv.startAnimation(scaleAnimation);
}

TranslateAnimation

public void click4(View view) {
    TranslateAnimation translateAnimation = new TranslateAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.3f);
    translateAnimation.setDuration(2000);
    translateAnimation.setFillAfter(true);
    lv.startAnimation(translateAnimation);
}

属性动画

会改变控件真实的坐标 api level 11

xml实现

AlphaAnimation



    


RotateAnimation




ScaleAnimation






TranslateAnimation




类中使用

ObjectAnimator oa = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.oanimator);
    //设置执行目标
    oa.setTarget(iv);
    oa.start();

代码中实现

public void click1(View view) {
    ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.5f, 0, 1,0,1,0,1,0,1,0,1);
    objectAnimator.setDuration(2000);
    objectAnimator.start();
}

你可能感兴趣的:(Android)