Animation动画总结1

动画类型

Androidanimation由四种类型组成

1.png

2011-4-23 22:23 上传
下载附件(12.8 KB)


Android动画模式

Animation主要有两种动画模式:
一种是tweened animation(渐变动画)

XML
JavaCode
alpha
AlphaAnimation
scale
ScaleAnimation


一种是frame by frame(画面转换动画)
XML
JavaCode
translate
TranslateAnimation
rotate
RotateAnimation



如何在XML文件中定义动画

①  打开Eclipse,新建Android工程
②  res目录中新建anim文件夹
③  anim目录中新建一个myanim.xml(注意文件名小写)
④  加入XML的动画代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3.   <alpha/>
  4.   <scale/>
  5.   <translate/>
  6.   <rotate/>
  7. </set>
复制代码


Android动画解析--XML

<alpha>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <alpha
  4. android:fromAlpha="0.1"
  5. android:toAlpha="1.0"
  6. android:duration="3000"
  7. />
  8. <!-- 透明度控制动画效果 alpha
  9.         浮点型值:
  10.             fromAlpha 属性为动画起始时透明度
  11.             toAlpha   属性为动画结束时透明度
  12.             说明:
  13.                 0.0表示完全透明
  14.                 1.0表示完全不透明
  15.             以上值取0.0-1.0之间的float数据类型的数字
  16.         
  17.         长整型值:
  18.             duration  属性为动画持续时间
  19.             说明:     
  20.                 时间以毫秒为单位
  21. -->
  22. </set>
复制代码

<scale>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3.    <scale  
  4.           android:interpolator=
  5.                      "@android:anim/accelerate_decelerate_interpolator"
  6.           android:fromXScale="0.0"
  7.           android:toXScale="1.4"
  8.           android:fromYScale="0.0"
  9.           android:toYScale="1.4"
  10.           android:pivotX="50%"
  11.           android:pivotY="50%"
  12.           android:fillAfter="false"
  13.           android:duration="700" />
  14. </set>
  15. <!-- 尺寸伸缩动画效果 scale
  16.        属性:interpolator 指定一个动画的插入器
  17.         在我试验过程中,使用android.res.anim中的资源时候发现
  18.         有三种动画插入器:
  19.             accelerate_decelerate_interpolator  加速-减速 动画插入器
  20.             accelerate_interpolator        加速-动画插入器
  21.             decelerate_interpolator        减速- 动画插入器
  22.         其他的属于特定的动画效果
  23.       浮点型值:
  24.          
  25.             fromXScale 属性为动画起始时 X坐标上的伸缩尺寸   
  26.             toXScale   属性为动画结束时 X坐标上的伸缩尺寸     
  27.         
  28.             fromYScale 属性为动画起始时Y坐标上的伸缩尺寸   
  29.             toYScale   属性为动画结束时Y坐标上的伸缩尺寸   
  30.         
  31.             说明:
  32.                  以上四种属性值   
  33.    
  34.                     0.0表示收缩到没有
  35.                     1.0表示正常无伸缩     
  36.                     值小于1.0表示收缩  
  37.                     值大于1.0表示放大
  38.         
  39.             pivotX     属性为动画相对于物件的X坐标的开始位置
  40.             pivotY     属性为动画相对于物件的Y坐标的开始位置
  41.         
  42.             说明:
  43.                     以上两个属性值 从0%-100%中取值
  44.                     50%为物件的X或Y方向坐标上的中点位置
  45.         
  46.         长整型值:
  47.             duration  属性为动画持续时间
  48.             说明:   时间以毫秒为单位

  49.         布尔型值:
  50.             fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用
  51. -->
复制代码


<translate>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <translate
  4. android:fromXDelta="30"
  5. android:toXDelta="-80"
  6. android:fromYDelta="30"
  7. android:toYDelta="300"
  8. android:duration="2000"
  9. />
  10. <!-- translate 位置转移动画效果
  11.         整型值:
  12.             fromXDelta 属性为动画起始时 X坐标上的位置   
  13.             toXDelta   属性为动画结束时 X坐标上的位置
  14.             fromYDelta 属性为动画起始时 Y坐标上的位置
  15.             toYDelta   属性为动画结束时 Y坐标上的位置
  16.             注意:
  17.                      没有指定fromXType toXType fromYType toYType 时候,
  18.                      默认是以自己为相对参照物            
  19.         长整型值:
  20.             duration  属性为动画持续时间
  21.             说明:   时间以毫秒为单位
  22. -->
  23. </set>
复制代码

<rotate>

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <rotate
  4.         android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  5.         android:fromDegrees="0"
  6.         android:toDegrees="+350"         
  7.         android:pivotX="50%"
  8.         android:pivotY="50%"     
  9.         android:duration="3000" />  
  10. <!-- rotate 旋转动画效果
  11.        属性:interpolator 指定一个动画的插入器
  12.              在我试验过程中,使用android.res.anim中的资源时候发现
  13.              有三种动画插入器:
  14.                 accelerate_decelerate_interpolator   加速-减速 动画插入器
  15.                 accelerate_interpolator               加速-动画插入器
  16.                 decelerate_interpolator               减速- 动画插入器
  17.              其他的属于特定的动画效果
  18.                            
  19.        浮点数型值:
  20.             fromDegrees 属性为动画起始时物件的角度   
  21.             toDegrees   属性为动画结束时物件旋转的角度 可以大于360度   

  22.         
  23.             说明:
  24.                      当角度为负数——表示逆时针旋转
  25.                      当角度为正数——表示顺时针旋转              
  26.                      (负数from——to正数:顺时针旋转)   
  27.                      (负数from——to负数:逆时针旋转)
  28.                      (正数from——to正数:顺时针旋转)
  29.                      (正数from——to负数:逆时针旋转)      

  30.             pivotX     属性为动画相对于物件的X坐标的开始位置
  31.             pivotY     属性为动画相对于物件的Y坐标的开始位置
  32.                
  33.             说明:        以上两个属性值 从0%-100%中取值
  34.                          50%为物件的X或Y方向坐标上的中点位置

  35.         长整型值:
  36.             duration  属性为动画持续时间
  37.             说明:       时间以毫秒为单位
  38. -->
  39. </set>
复制代码

如何使用XML中的动画效果

  1. public static Animation loadAnimation (Context context, int id)
  2. //第一个参数Context为程序的上下文   
  3. //第二个参数id为动画XML文件的引用
  4. //例子:
  5. myAnimation= AnimationUtils.loadAnimation(this,R.anim.my_action);
  6. //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
复制代码

如何在Java代码中定义动画

  1. //在代码中定义 动画实例对象
  2. private Animation myAnimation_Alpha;
  3. private Animation myAnimation_Scale;
  4. private Animation myAnimation_Translate;
  5. private Animation myAnimation_Rotate;
  6.    
  7.     //根据各自的构造方法来初始化一个实例对象
  8. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);

  9. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
  10.              Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

  11. myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

  12. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
  13.                Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
复制代码


Android动画解析--JavaCode


AlphaAnimation

① AlphaAnimation类对象定义

  1. private AlphaAnimation myAnimation_Alpha;
复制代码

② AlphaAnimation类对象构造

  1. AlphaAnimation(float fromAlpha, float toAlpha)
  2. //第一个参数fromAlpha为 动画开始时候透明度
  3. //第二个参数toAlpha为 动画结束时候透明度
  4. myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
  5. //说明:
  6. //                0.0表示完全透明
  7. //                1.0表示完全不透明
复制代码

③ 设置动画持续时间

  1. myAnimation_Alpha.setDuration(5000);
  2. //设置时间持续时间为 5000毫秒
复制代码


ScaleAnimation

① ScaleAnimation类对象定义

  1. private AlphaAnimation myAnimation_Alpha;
复制代码

② ScaleAnimation类对象构造

  1. ScaleAnimation(float fromX, float toX, float fromY, float toY,
  2.            int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
  3. //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸   
  4. //第二个参数toX为动画结束时 X坐标上的伸缩尺寸     
  5. //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸   
  6. //第四个参数toY为动画结束时Y坐标上的伸缩尺寸  
  7. /*说明:
  8.                     以上四种属性值   
  9.                     0.0表示收缩到没有
  10.                     1.0表示正常无伸缩     
  11.                     值小于1.0表示收缩  
  12.                     值大于1.0表示放大
  13. */
  14. //第五个参数pivotXType为动画在X轴相对于物件位置类型  
  15. //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
  16. //第七个参数pivotXType为动画在Y轴相对于物件位置类型   
  17. //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
  18. myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
  19.              Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
复制代码

③ 设置动画持续时间

  1. myAnimation_Scale.setDuration(700);
  2. //设置时间持续时间为 700毫秒
复制代码

TranslateAnimation


① TranslateAnimation类对象定义

  1. private AlphaAnimation myAnimation_Alpha;
复制代码

② TranslateAnimation类对象构造

  1. TranslateAnimation(float fromXDelta, float toXDelta,
  2.                        float fromYDelta, float toYDelta)
  3. //第一个参数fromXDelta为动画起始时 X坐标上的移动位置   
  4. //第二个参数toXDelta为动画结束时 X坐标上的移动位置      
  5. //第三个参数fromYDelta为动画起始时Y坐标上的移动位置     
  6. //第四个参数toYDelta为动画结束时Y坐标上的移动位置
复制代码

③ 设置动画持续时间

  1. myAnimation_Translate.setDuration(2000);
  2. //设置时间持续时间为 2000毫秒
复制代码

RotateAnimation
① RotateAnimation类对象定义

  1. private AlphaAnimation myAnimation_Alpha;
复制代码

② RotateAnimation类对象构造

  1. RotateAnimation(float fromDegrees, float toDegrees,
  2.             int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
  3. //第一个参数fromDegrees为动画起始时的旋转角度   
  4. //第二个参数toDegrees为动画旋转到的角度   
  5. //第三个参数pivotXType为动画在X轴相对于物件位置类型  
  6. //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
  7. //第五个参数pivotXType为动画在Y轴相对于物件位置类型   
  8. //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
  9. myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f,
  10.                Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
复制代码

③ 设置动画持续时间

  1. myAnimation_Rotate.setDuration(3000);
  2. //设置时间持续时间为 3000毫秒
复制代码
 
 
实例

  • 新建工程 myFrameAnimation

  • 在main.xml布局中添加view子类,调整一下,效果如下:

1.png
2011-4-23 22:35 上传
下载附件(19.14 KB)
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:prientation="vertical" android:layout_width="fill_parent"
  4.     android:layout_height="fill_parent">
  5.     <LinearLayout android:prientation="horizontal"
  6.         android:layout_width="fill_parent" android:layout_height="wrap_content"
  7.         android:background="@drawable/bt_group_back" android:layout_marginTop="10px">
  8.         <Button android:text="播放动画" android:layout_width="100px"
  9.             android:id="@+id/Button_start" android:layout_height="fill_parent"></Button>
  10.         <Button android:layout_width="100px" android:text="停止动画"
  11.             android:id="@+id/Button_stop" android:layout_height="fill_parent"></Button>
  12.         <CheckBox android:text="动画重复" android:layout_width="100px"
  13.             android:id="@+id/CheckBox_ifCycle_orNot" style="?android:attr/starStyle"
  14.             android:layout_height="fill_parent"></CheckBox>
  15.     </LinearLayout>
  16.     <ImageView android:id="@+id/rocket_image"
  17.         android:layout_width="80px" android:layout_height="80px"
  18.         android:background="@drawable/android_large"
  19.         android:layout_marginLeft="100dp" android:layout_marginTop="100dp"></ImageView>
  20. </LinearLayout>
复制代码
  • 找几个动态图片,把它分成单个图。(主要是为了讲解/是用FrameAnimation效果,AnimationDrawable)


  • 修改mainActivity.java的代码
    1. package zyf.my.frame.animation;

    2. import android.app.Activity;
    3. import android.graphics.drawable.AnimationDrawable;
    4. import android.os.Bundle;
    5. import android.view.MotionEvent;
    6. import android.view.View;
    7. import android.widget.Button;
    8. import android.widget.CheckBox;
    9. import android.widget.ImageView;
    10. import android.widget.Toast;
    11. public class myFrameAnimatino extends Activity implements Button.OnClickListener {
    12.     /** Called when the activity is first created. */
    13.     AnimationDrawable frameAnimation;
    14.     /*
    15.      * 声明AnimationDrawable 可绘制动画 对象frameAnimation
    16.      */
    17.     ImageView myImage;
    18.     /*
    19.      * 图片View ImageView
    20.      */
    21.     Button start,stop;
    22.     CheckBox Cycle;
    23.     boolean isChecked_cycle=true;
    24.     /*
    25.      * (non-Javadoc)
    26.      * @see android.app.Activity#onCreate(android.os.Bundle)
    27.      */
    28.     @Override
    29.     public void onCreate(Bundle savedInstanceState) {
    30.         super.onCreate(savedInstanceState);
    31.         setContentView(R.layout.main);
    32.         
    33.         start=(Button) findViewById(R.id.Button_start);
    34.         stop=(Button) findViewById(R.id.Button_stop);
    35.         Cycle=(CheckBox) findViewById(R.id.CheckBox_ifCycle_orNot);
    36.         /*
    37.          * findViewById()从XML中获取 Button  CheckBox
    38.          */
    39.         
    40.         myImage = (ImageView) findViewById(R.id.rocket_image);
    41.         /*
    42.          * findViewById()从XML中获取ImageView 对象myImage
    43.          */
    44.         myImage.setBackgroundResource(R.anim.myframeanimation);
    45.         /*
    46.          * ImageView.setBackgroundResource()设置 图片View的背景图片
    47.          * 这里是把帧动画 myframeanimation加到 图片View的背景中
    48.          */
    49.         frameAnimation = (AnimationDrawable) myImage.getBackground();
    50.         /*
    51.          * myImage.getBackground()获得背景的Drawable的对象,转换成AnimationDrawable
    52.          */
    53.         
    54.         start.setOnClickListener(this);
    55.         stop.setOnClickListener(this);
    56.     }
    57.     /*
    58.      * (non-Javadoc)
    59.      * @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
    60.      */
    61.     @Override
    62.     public boolean onTouchEvent(MotionEvent event) {
    63.         frameAnimation.setOneShot(isChecked_cycle);
    64.         /*
    65.          * 添加触摸事件处理方法
    66.          */
    67.         // TODO Auto-generated method stub
    68.         if(event.getAction()==MotionEvent.ACTION_DOWN){
    69.             /*
    70.              * MotionEvent.getAction()获取事件动作
    71.              * MotionEvent.ACTION_DOWN 向下的手势动作
    72.              */

    73.         /*event.getAction() 返回正被执行的动作种类:
    74.          * 是     ACTION_DOWN, ACTION_MOVE, ACTION_UP, 或 ACTION_CANCEL中的一个.
    75.          */
    76.             frameAnimation.start();
    77.             /*
    78.              * 启动帧动画效果
    79.              */
    80.             return true;

    81.         }
    82.         return super.onTouchEvent(event);
    83.     }
    84.     /*
    85.      * (non-Javadoc)
    86.      * @see android.view.View.OnClickListener#onClick(android.view.View)
    87.      */
    88.     @Override
    89.     public void onClick(View button) {
    90.         // TODO Auto-generated method stub
    91.         switch (button.getId()) {
    92.         case R.id.Button_start:{
    93.             if(Cycle.isChecked()){
    94.                 Toast.makeText(this, "动画重复", Toast.LENGTH_LONG).show();
    95.                 isChecked_cycle=false;
    96.             }else{
    97.                 Toast.makeText(this, "不重复", Toast.LENGTH_LONG).show();
    98.                 isChecked_cycle=true;
    99.             }
    100.             /*
    101.              * 复选按钮选中,  动画重复播放,  AnimationDrawable.setOneShot(false)
    102.              * 复选按钮未选中,动画不重复播放,AnimationDrawable.setOneShot(true)
    103.              */
    104.             
    105.             frameAnimation.setOneShot(isChecked_cycle);
    106.             /*
    107.              * 设置重复与否
    108.              */
    109.             frameAnimation.start();
    110.             /*
    111.              *启动帧动画效果
    112.              */
    113.             
    114.         }
    115.             break;
    116.         case R.id.Button_stop:{
    117.             if(frameAnimation.isRunning()){
    118.                 /*
    119.                  * AnimationDrawable.isRunning(),判断帧动画是否在运行,true---运行中
    120.                  * 如果动画正在运行,可以停止
    121.                  */
    122.                 frameAnimation.stop();
    123.                 /*
    124.                  *停止帧动画效果
    125.                  */
    126.             }
    127.             
    128.         }
    129.             break;
    130.         default:
    131.             break;
    132.         }
    133.     }
    134. }
    复制代码

    2.png
    2011-4-23 22:35 上传
    下载附件(32.89 KB)
    3.png
    2011-4-23 22:35 上传
    下载附件(29.18 KB)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值