分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
http://book.51cto.com/art/201204/328247.htm
第9章 Android动画效果
Android系统提供了两种实现动画的方式,一种是补间动画(Tween Animation),另一种是帧动画(Frame Animation)。补间动画可以实现View组件的移动、放大、缩小以及渐变等效果,帧动画则提供了一种逐帧播放图片的动画方式。无论是补间动画还是帧动画,Android均为其进行了封装,提供了非常简单的应用接口。
9.1 Animation类:动画抽象类
Animation类是Android系统的一个动画抽象类,所有其他一些动画类都要继承该类中的实现方法。Animation类主要用于补间动画效果,提供了动画启动、停止、重复、持续时间等方法。Animation类中的方法适用于任何一种补间动画对象。
9.1.1 setDuration方法:设置持续时间
【功能说明】该方法用于设置动画的持续时间,以毫秒为单位。该方法是设置补间动画时间长度的主要方法,使用非常普遍。
【基本语法】public void setDuration (long durationMillis)
其中,参数durationMillis为动画的持续时间,单位为毫秒(ms)。
setDuration方法的示例可以参阅startNow方法中的示例代码。
9.1.2 startNow方法:立刻启动动画
【功能说明】该方法用于启动执行一个动画。该方法是启动执行动画的主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画。另外,用户在程序中也可以使用View组件的startAnimation方法来启动执行动画。
【基本语法】public void startNow ()
【实例演示】下面通过代码来演示如何设置一个简单的动画效果。
在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮监听器中,通过setDuration方法设置动画持续时间,并为image对象设置动画效果,最后使用startNow方法启动动画效果。读者执行这段代码,点击"执行动画"按钮,可以在手机屏幕上看到如图9.1所示的显示效果。图中所示的图片将沿45 方向向右下角移动。
- 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(); //启动动画
- }
- });
- }
- }
9.1.3 start方法:启动动画
【功能说明】该方法用于启动执行一个动画。该方法是启动执行动画的另一个主要方法,使用时需要先通过setAnimation方法为某一个View对象设置动画。start方法区别于startNow方法的地方在于,start方法可以用于在getTransformation方法被调用时启动动画。
【基本语法】public void start ()
start方法的执行效果类似于startNow方法,这里不再赘述。
9.1.4 cancel方法:取消动画
【功能说明】该方法用于取消一个动画的执行。该方法是取得一个正在执行中的动画的主要方法。cancel方法和startNow方法结合可以实现对动画执行过程的控制。需要注意的是,通过cancel方法取消的动画,必须使用reset方法或者setAnimation方法重新设置,才可以再次执行动画。
【基本语法】public void cancel ()
【实例演示】下面通过代码来演示如何取消动画效果执行。
在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在第一个按钮监听器中,通过setDuration方法设置动画持续时间,并为image对象设置动画效果,最后使用startNow方法启动动画效果。在第二个按钮监听器中,调用cancel方法取消动画执行。读者执行这段代码,可以在手机屏幕上看到如图9.2所示的显示效果。当点击"执行动画"按钮时,图片开始移动;当点击"停止动画"按钮时,动画被取消,重新返回起始位置。
- 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(); /
- /取消动画执行
- }
- });
- }
- }
图9.1 启动动画 |
图9.2 取消动画 |
9.1.5 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(); //取消动画执行
- }
- });
- }
- }
在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在第一个按钮监听器中,通过setDuration方法设置动画持续时间,通过setRepeatCount方法设置重复次数,并为image对象设置动画效果,最后使用startNow方法启动动画效果。在第二个按钮监听器中,调用cancel方法取消动画执行。读者执行这段代码,当点击"执行动画"按钮时,将看到动画被重复执行了两次,也就是总共执行了3次动画。
注意:这里设置的是动画重复执行的次数,而不是动画执行的次数。故动画执行的次数为动画重复执行的次数加1。
9.1.6 setFillEnabled方法:使能填充效果
【功能说明】该方法用于使能填充效果。当该方法设置为true时,将执行setFillBefore和setFillAfter方法,否则将忽略setFillBefore和setFillAfter方法。
【基本语法】public void setFillEnabled (boolean fillEnabled)
其中,参数fillEnabled为是否使能填充效果,true表示使能该效果,false表示禁用该效果。
setFillEnabled方法的示例可以参阅setFillBefore方法和setFillAfter方法中的示例代码。
9.1.7 setFillBefore方法:设置起始填充
【功能说明】该方法用于设置一个动画效果执行完毕后,View对象返回到起始的位置。该方法的效果是系统默认的效果。该方法的执行,需要首先通过setFillEnabled方法使能填充效果,否则设置无效。
【基本语法】public void setFillBefore (boolean fillBefore)
其中,参数fillBefore为是否执行起始填充效果,true表示使能该效果,false表示禁用该效果。
【实例演示】下面通过代码来演示如何让View对象在动画执行完毕后回归到起始位置。
在这段代码中,首先初始化了一个移动的动画效果translateAnimation。然后,在按钮监听器中,通过setDuration方法设置动画持续时间,通过setFillBefore方法使对象回到起始点,并使用setFillEnabled使能填充效果,最后使用startNow方法启动动画效果。读者执行这段代码,当点击"执行动画"按钮时,图片开始移动,当动画结束之后,图片将自动跳回到起始位置,如图9.3所示。
- 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(); //取消动画执行
- }
- });
- }
- }
9.1.8 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.se
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow