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

认识动画(1)-View Animation

程序员文章站 2024-03-25 23:47:46
...

概述

我们在使用手机时经常会被一些炫酷的动画效果所吸引,如果我们能*的那样的动画来设计自己的App就好了,是吧?那还等什么,来让我们操练起来...

基础动画分类

动画主要分为两大类:View Animation   Property Animator

  • View Animation (视图动画):
    主要包括Tween Animation(补间动画)和Frame Animation(逐帧动画);
  • Property Animator(属性动画):
    主要包括ValueAnimator和ObjectAnimation ;
  • 区别
  1. 引入时间不同:View Animation是API Level 1就引入的.property Animator是API Level11引入的,即Android3.0才开始Property Animation相关的API.
  2. 所在包名不同:View Animation在包android.view.animation中.而Property Animation API在包android.anmation中.
  3. 动画类的命名不同:View Animation中动画类取名都叫XXXXAnimation,而在Property Animator 中的类取名叫xxxxAnimator.

Tween Animation使用(XML文件)

android 的animation由四种类型组成:alpha(透明度), scale(伸缩), translate(位移), rotate(旋转).

  1. scale(伸缩)
    scale标签是缩放动画,可以实现动态调节控件尺寸的效果,有下面几个属性:
  • android:fromXScale 起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
  • android:toXScale 结尾的X方向上相对自身的缩放比例,浮点值;
  • android:fromYScale 起始的Y方向上相对自身的缩放比例,浮点值,
  • android:toYScale 结尾的Y方向上相对自身的缩放比例,浮点值;
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)
  • android:pivotY 缩放起点Y轴坐标,取值及意义跟android:pivotX一样。
  1. alpha(透明度)
  • android:fromAlpha 动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  • android:toAlpha 动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
  1. rotate(旋转)
  • android:fromDegrees 开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:toDegrees 结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
  • android:pivotX 缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:pivotY 缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
  1. translate(平移)
  • android:fromXDelta 起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
  • android:fromYDelta 起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
  • android:toXDelta 结束点X轴坐标
  • android:toYDelta 结束点Y轴坐标
  1. set(动作合集)
    set没有自己的独有属性,只是作为一个包裹动作的容器存在.
    6.共有属性
    由于上述标签都继承自Animation,所以都有下列继承自Animation的属性
  • android:duration 动画持续时间,以毫秒为单位
  • android:fillAfter 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount 重复次数
  • android:repeatMode 重复类型,有reverse和restart两个值,reverse表示倒序回放,restart表示重新放一遍,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator 设定插值器,其实就是指定的动作效果,比如弹跳效果等,不在这小节中讲解,后面会单独列出一单讲解。

将标签动画应用到控件上

  1. 新建工程,新建scale动画文件
    新建一个工程,并且在res文件夹下新建一个anim文件夹,将新建的scale动画文件放到anim文件里.
  2. 编写xml布局文件
  3. 使用java代码运行动画
        Animation scaleAnimation = AnimationUtils.loadAnimation(this, R.anim.scaleanim);  
        TextView tv =(TextView)findViewById(R.id.tv);  
        tv.startAnimation(scaleAnimation); 

Tween Animation使用(java代码)

上面为大家介绍了使用xml文件编写动画,接下来我们一起看看如何使用代码创建Animation动画.
为了方便理解,我们了解一下上述的动画标签所对应的类.

  • scale -> ScaleAnimation
  • alpha -> AlphaAnimation
  • rotate -> RotateAnimation
  • translate ->TranslateAnimation
  • set -> AnimationSet
    上面我们提到过,这些类都继承自Animation,所以公共标签属性也应该有对应的方法.
  • android:duration setDuration(long) 动画持续时间,以毫秒为单位
  • android:fillAfter setFillAfter(boolean) 如果设置为true,控件动画结束时,将保持动画最后时的状态
  • android:fillBefore setFillBefore(boolean) 如果设置为true,控件动画结束时,还原到开始动画前的状态
  • android:fillEnabled setFillEnabled(boolean) 与android:fillBefore 效果相同,都是在动画结束时,将控件还原到初始化状态
  • android:repeatCount setRepeatCount(int) 重复次数
  • android:repeatMode setRepeatMode(int) 重复类型,有reverse和restart两个值,取值为RESTART或 REVERSE,必须与repeatCount一起使用才能看到效果。因为这里的意义是重复的类型,即回放时的动作。
  • android:interpolator setInterpolator(Interpolator) 设定插值器,其实就是指定的动作效果,比如弹跳效果等
    了解了对应类和公共属性对应的方法,接下来我们看一下每个类独有的设置参数的方法:
  1. ScaleAniamtion(缩放比例)
  • ScaleAnimation(Context context, AttributeSet attrs) 从XML文件加载动画,基本用不到
  • ScaleAnimation(float fromX, float toX, float fromY, float toY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
  • ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float -
  • pivotXValue, int pivotYType, float pivotYValue)
  1. AlphaAnimation(透明度)
  • AlphaAnimation(Context context, AttributeSet attrs) 同样,从本地XML加载动画,基本不用
  • AlphaAnimation(float fromAlpha, float toAlpha)
  1. RotateAnimation(旋转)
  • RotateAnimation(Context context, AttributeSet attrs)  从本地XML文档加载动画,同样,基本不用
  • RotateAnimation(float fromDegrees, float toDegrees)
  • RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
  • RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int -
  • pivotYType, float pivotYValue)
  1. TranslateAnimation
  • TranslateAnimation(Context context, AttributeSet attrs) 同样,基本不用
  • TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
  • TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int -
  • fromYType, float fromYValue, int toYType, float toYValue)
  1. AnimationSet
  • AnimationSet(Context context, AttributeSet attrs) 同样,基本不用
  • AnimationSet(boolean shareInterpolator) shareInterpolator取值true或false,取true时,指在AnimationSet中定义一个插值器(interpolater),它下面的所有动画共同。如果设为false,则表示它下面的动画自己定义各自的插值器。
  • public void addAnimation (Animation a)向集合新增动画

将代码动画应用到控件上

使用方式和XML文件一样,使用view.startAniamtion(Animation a)开始执行动画.
注意
这里建议尽量使用代码构建动画,这样可以使页面加载更流畅.

FrameAniamtion

逐帧动画,顾名思义就是将图片集一帧一帧的播放达到动画的效果.逐帧动画的使用比较简单,下面我们了解了解

XML文件使用

想要创建逐帧动画我们需要一个标签animation-list这个标签为一个容器,内部可以容纳n个item标签,每一个item都是一个动画帧.item内含属性android:drawable表示这一帧的图片,android:duration表示当前动画帧持续的时间.该xml文件应该置于res/drawable目录下.

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@mipmap/lottery_1"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_2"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_3"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_4"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_5"
        android:duration="200" />
    <item
        android:drawable="@mipmap/lottery_6"
        android:duration="200" />

</animation-list>

代码使用

AnimationDrawable anim = new AnimationDrawable();
    for (int i = 1; i <= 6; i++) {
    int id = getResources().getIdentifier("lottery_" + i, "mipmap", getPackageName());
    Drawable drawable = getResources().getDrawable(id);
    anim.addFrame(drawable, 200);
    }
    anim.setOneShot(false);
    imageView.setImageDrawable(anim);
    anim.start();

使用addFrame方法来添加动画帧,start方法可以播放动画.

AnimationDrawable 几个常见的Api

  • void start() 开始播放
  • void stop() 停止播放
  • addFrame(Drawable frame, int duration) 添加一帧,并设置持续时间
  • void setOneShoe(boolean flag) false为循环播放,true为仅播放一次
  • boolean isRunning() 是否正在播放

关于View Animation的内容就介绍到这里.后面会介绍更加炫酷的属性动画,组合动画,等等动画效果实现.我们一起期待.

文章参考
http://www.cnblogs.com/whoislcj/p/5733740.html
http://blog.csdn.net/harvic880925/article/details/39996643