[Android动画] 补间动画(Tween Animation)一

  1. Animation类:动画抽象类

    Android系统提供了两种实现动画的方式,一种是补间动画(Tween Animation),另一种是帧动画(Frame Animation)。补间动画可以实现View组件的移动、放大、缩小以及渐变等效果,帧动画则提供了一种逐帧播放图片的动画方式。

    Animation类是Android系统的一个动画抽象类,所有其他一些动画类都要继承该类中的实现方法。Animation类主要用于补间动画效果,提供了动画启动、停止、重复、持续时间等方法。Animation类中的方法适用于任何一种补间动画对象。

  2. setDuration方法:设置持续时间

    【功能说明】该方法用于设置动画的持续时间,以毫秒为单位。该方法是设置补间动画时间长度的主要方法,使用非常普遍。

    【基本语法】public void setDuration (long durationMillis)

    其中,参数durationMillis为动画的持续时间,单位为毫秒(ms)。

  3. startNow方法:立刻启动动画

    【功能说明】该方法用于启动执行一个动画。该方法是启动执行动画的主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画。另外,用户在程序中也可以使用View组件的startAnimation方法来启动执行动画。

    【基本语法】public void startNow ()

    public class firstActivity extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
     
        final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
        Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
        final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
     
        btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
              
            @Override  
            public void onClick(View v) {  
                // TODO Auto-generated method stub  
                translateAnimation.setDuration(3000);               //设置动画持续时间  
                image.setAnimation(translateAnimation);             //设置动画效果  
                translateAnimation.startNow();                      //启动动画  
            }  
        });  
    }  
    }

4.  start方法:启动动画

    【功能说明】该方法用于启动执行一个动画。该方法是启动执行动画的另一个主要方法,使用时需要先通过       setAnimation方法为某一个View 对象设置动画。start方法区别于startNow方法的地方在于,start方法可以用于在getTransformation方法被调用时启动动 画。

    【基本语法】public void start ()

     start方法的执行效果类似于startNow方法,这里不再赘述

5.  cancel方法:取消动画

    【功能说明】该方法用于取消一个动画的执行。该方法是取得一个正在执行中的动画的主要方法。cancel方法和startNow方法结合可以实现对 动画执行过程的控制。需要注意的是,通过cancel方法取消的动画,必须使用reset方法或者setAnimation方法重新设置,才可以再次执行 动画。

    【基本语法】public void cancel ()

    【实例演示】下面通过代码来演示如何取消动画效果执行。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);//移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

6.  setRepeatCount方法:设置重复次数

    【功能说明】该方法用于设置一个动画效果重复执行的次数。Android系统默认每个动画仅执行一次,通过该方法可以  设置动画执行多次。

    【基本语法】public void setRepeatCount (int repeatCount)

     其中,参数repeatCount为重复执行的次数。如果设置为n,则动画将执行n+1次。

    【实例演示】下面通过代码来演示如何连续执行多次动画效果。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            translateAnimation.setRepeatCount(2);               //设置重复次数  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

7.  setFillEnabled方法:使能填充效果

    【功能说明】该方法用于使能填充效果。当该方法设置为true时,将执行setFillBefore和setFillAfter方法,否则将忽略setFillBefore和setFillAfter方法。

    【基本语法】public void setFillEnabled (boolean fillEnabled)

    其中,参数fillEnabled为是否使能填充效果,true表示使能该效果,false表示禁用该效果。

    setFillEnabled方法的示例可以参阅setFillBefore方法和setFillAfter方法中的示例代码

8.  setFillBefore方法:设置起始填充

    【功能说明】该方法用于设置一个动画效果执行完毕后,View对象返回到起始的位置。该方法的效果是系统默认的效果。该方法的执行,需要首先通过setFillEnabled方法使能填充效果,否则设置无效。

    【基本语法】public void setFillBefore (boolean fillBefore)

    其中,参数fillBefore为是否执行起始填充效果,true表示使能该效果,false表示禁用该效果。

    【实例演示】下面通过代码来演示如何让View对象在动画执行完毕后回归到起始位置。

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            translateAnimation.setFillBefore(true);             //回归起始位置  
            translateAnimation.setFillEnabled(true);            //使能填充效果  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

    在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮 监听器中,通过    setDuration方法设置动画持续时间,通过setFillBefore方法使对象回到起始点,并使用setFillEnabled 使能填充效果,最后使用startNow方法启动动画效果。读者执行这段代码,当点击"执行动画"按钮时,图片开始移动,当动画结束之后,图片将自动跳回 到起始位置

9. setFillAfter方法:设置终止填充

    【功能说明】该方法用于设置一个动画效果执行完毕后,View对象保留在终止的位置。该方法的执行,需要首先通过setFillEnabled方法使能填充效果,否则设置无效。

    【基本语法】public void setFillAfter (boolean fillAfter)

    其中,参数fillAfter为是否执行终止填充效果,true表示使能该效果,false表示禁用该效果。

    【实例演示】下面通过代码来演示如何让View对象在动画执行完毕后保留在终止位置。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            translateAnimation.setFillAfter (true);             //保留在终止位置  
            translateAnimation.setFillEnabled(true);            //使能填充效果  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

    在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮监听器中,通过setDuration方法设置动画持 续时间,通过setFillAfter方法使对象保留在终止点,并使用setFillEnabled使能填充效果,最后使用startNow方法启动动画 效果。读者执行这段代码,当点击"执行动画"按钮时,图片开始移动,当动画结束之后,图片将停留在终止位置

10.  setRepeatMode方法:设置重复模式

    【功能说明】该方法用于设置一个动画效果执行的重复模式。Android系统中提供了几种重复模式,其中最主要的便是RESTART模式和REVERSE模式。

    【基本语法】public void setRepeatMode (int repeatMode)

    其中,参数repeatMode为动画效果的重复模式,常用的取值如下。

    RESTART:重新从头开始执行。

    REVERSE:反方向执行。

    【实例演示】下面通过代码来演示如何更改动画路径的方向。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            translateAnimation.setRepeatCount(2);               //设置重复次数  
            translateAnimation.setRepeatMode(Animation.RESTART);    //重新从头执行  
            //translateAnimation.setRepeatMode(Animation.REVERSE);  //反方向执行  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

    在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮监听器中,通过setDuration方法设置 动画持续时间,通过setRepeatCount方法设置重复次数,通过setRepeatMode设置重复模式,最后使用startNow方法启动动画 效果。

如果设置的重复模式为Animation.RESTART,则表示重新从头开始执行。读者执行这段代码,当点击"执行动画"按钮时,图片开始移动,当一次动画执行结束之后,图片将重新从头开始执行。

如果设置的重复模式为Animation.REVERSE,则表示反方向执行。读者执行这段代码,当点击"执行动画"按钮时,图片开始移动,当一次动画执行结束之后,图片将向反方向运动.

11.  setStartOffset方法:设置启动时间

    【功能说明】该方法用于设置一个动画执行的启动时间,单位为毫秒。系统默认当执行start方法后立刻执行动画,当使用该方法设置后,将延迟一定的时间再启动动画。

    【基本语法】public void setStartOffset (long startOffset)

    其中,参数startOffset为动画的启动时间,单位为毫秒(ms)。

    【实例演示】下面通过代码来演示如何更改动画的启动时间。

    

public class firstActivity extends Activity {  
/** Called when the activity is first created. */  
@Override  
public void onCreate(Bundle savedInstanceState) {               //重载onCreate方法  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.main);  
 
    final ImageView image=(ImageView)findViewById(R.id.imageView1); //ImageView对象  
    Button btn1=(Button)findViewById(R.id.button1);             //按钮对象  
    Button btn2=(Button)findViewById(R.id.button2);  
    final Animation translateAnimation=new TranslateAnimation(0,200,0,200);                                                                 //移动动画效果  
 
    btn1.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.setDuration(3000);               //设置动画持续时间  
            translateAnimation.setStartOffset(3000);            //设置启动时间  
            image.setAnimation(translateAnimation);             //设置动画效果  
            translateAnimation.startNow();                      //启动动画  
        }  
    });  
    btn2.setOnClickListener(new View.OnClickListener() {            //设置监听器  
          
        @Override  
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            translateAnimation.cancel();                        //取消动画执行  
        }  
    });  
}  
}

在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮监听器中,通过setDuration方法设置动画的 持续时间,通过setStartOffset方法设置动画的启动时间,最后使用startNow方法启动动画效果。读者执行这段代码,当点击"执行动画" 按钮时,将等待3秒之后,图片才开始移动。


你可能感兴趣的:([Android动画] 补间动画(Tween Animation)一)