彻底攻破Android Animation(二)

彻底攻破Android Animation(二)_第1张图片
怀揣理想才能走的更远!
  • 东方来叨叨:
    • 你和行业顶尖人才的最大区别就是:"你从未在内心深处告诉自己:我一定要在这个行业出类拔萃,在这个行业里打造自己的人生事业!"
    • 怀揣理想才能走的更远!
    • 以下博客我不相信凡是看过的人会说:我不能写一个简单的基本动画。

Android动画可以分为两种,View Animation(视图动画)和Property Animation(属性动画),本文主要讲的是对View Animation的了解和使用。

  • 直接先看官方:

View Animation
There are two types of animations that you can do with the view animation framework:
Tween animation: Creates an animation by performing a series of transformations on a single image with an Animation

Frame animation: or creates an animation by showing a sequence of images in order with an AnimationDrawable

  • View Animation包括两种:
    • 补间动画(Tween Animation).
    • 帧动画 (Frame Animation).

一.Tween Animation

1.Animation 动画类型

名称 xml javaCode 描述
透明度动画 alph AlphaAnimation 渐变透明度动画效果
缩放动画 scale ScaleAnimation 渐变尺寸伸缩动画效果
平移动画 translate TranslateAnimation 画面转换位置移动动画效果
旋转动画 rotate RotateAnimation 画面转移旋转动画效果

2.在XML文件中定义动画

①新建 Android 项目
②在res目录中新建anim文件夹
③在anim目录中新建一个my_anim.xml(注意文件名小写)
④在 my_anim.xml 加入动画代码



  
  
  
  

3.Android动画解析--XML

3.1 alpha 渐变透明度动画效果



    
    
    

    

3.2 scale 渐变尺寸伸缩动画效果




    



    

3.3 translate 画面转换位置移动动画效果




    


    

3.4 rotate 画面转移旋转动画效果




    


    

4.如何使用XML中的动画效果

 public static Animation loadAnimation(Context context, int id) throws NotFoundException {
        throw new RuntimeException("Stub!");
    }
//使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件
Animation mAnimation= AnimationUtils.loadAnimation(this,R.anim.my_anim);

5.如何在java代码中实现动画效果

//在代码中定义 动画实例对象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;

        // 第一个参数fromAlpha为 动画开始时候透明度
        // 第二个参数toAlpha为 动画结束时候透明度
        //说明:0.0表示完全透明,1.0表示完全不透明
        myAnimation_Alpha = new AlphaAnimation(0.1f, 1.0f);


        //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
        //第二个参数toX为动画结束时 X坐标上的伸缩尺寸
        //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
        //第四个参数toY为动画结束时Y坐标上的伸缩尺寸
        /*说明:
          以上四种属性值
          0.0表示收缩到没有
          1.0表示正常无伸缩
          值小于1.0表示收缩
          值大于1.0表示放大
        */
        //第五个参数pivotXType为动画在X轴相对于物件位置类型
        //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
        //第七个参数pivotXType为动画在Y轴相对于物件位置类型
        //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
        myAnimation_Scale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);


        //第一个参数fromXDelta为动画起始时 X坐标上的移动位置
        //第二个参数toXDelta为动画结束时 X坐标上的移动位置
        //第三个参数fromYDelta为动画起始时Y坐标上的移动位置
        //第四个参数toYDelta为动画结束时Y坐标上的移动位置
        myAnimation_Translate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
        
        
        //第一个参数fromDegrees为动画起始时的旋转角度  
        //第二个参数toDegrees为动画旋转到的角度  
        //第三个参数pivotXType为动画在X轴相对于物件位置类型 
        //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
        //第五个参数pivotXType为动画在Y轴相对于物件位置类型  
        //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
        myAnimation_Rotate = new RotateAnimation(0.0f, +350.0f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

二.FrameAnimation

帧动画是顺序播放一组预先定义好的图片,类似于电影播放。

//res/drawable/loading_data.xml


    
    
    
    
    
    
    
    
    
    
    

 mLoadingView = (ImageView) findViewById(R.id.iv_loading);
 mLoadingView.setBackgroundResource(R.drawable.loading_data);
 AnimationDrawable aniDrawable = (AnimationDrawable) mLoadingView.getBackground();
 aniDrawable.start();
帧动画的使用比较容易引起OOM,所以在使用帧动画时应尽量使用尺寸较小的图片。

三.开发中的一些实际效果

三(1).关于Tween Animation,可以看这篇博客,内容丰富.Tween Animation的实际效果如下图所示:点击可查看代码

Tween Animation.gif

三(2).关于FrameAnimation,实际效果如下,这是去年初开发的一款阅读器项目当时用的加载loading。非常简单,就是按照我第二部分讲的。
彻底攻破Android Animation(二)_第2张图片
FrameAnimation.gif

四.结语

基本动画使用很简单,我们要尽量一次掌握,这么简单的知识总不能在用的时候还找度娘吧。基本动画只是开始,既然彻底攻破,那就接着干!

你可能感兴趣的:(彻底攻破Android Animation(二))