欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-25 15:18:10
...
  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秒之后,图片才开始移动。


转载于:https://my.oschina.net/u/242041/blog/198916