[Android动画] 补间动画(Tween Animation)一
-
Animation类:动画抽象类
Android系统提供了两种实现动画的方式,一种是补间动画(Tween Animation),另一种是帧动画(Frame Animation)。补间动画可以实现View组件的移动、放大、缩小以及渐变等效果,帧动画则提供了一种逐帧播放图片的动画方式。
Animation类是Android系统的一个动画抽象类,所有其他一些动画类都要继承该类中的实现方法。Animation类主要用于补间动画效果,提供了动画启动、停止、重复、持续时间等方法。Animation类中的方法适用于任何一种补间动画对象。
-
setDuration方法:设置持续时间
【功能说明】该方法用于设置动画的持续时间,以毫秒为单位。该方法是设置补间动画时间长度的主要方法,使用非常普遍。
【基本语法】public void setDuration (long durationMillis)
其中,参数durationMillis为动画的持续时间,单位为毫秒(ms)。
-
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