Android动画基础-Tween和Frame动画

原创 2015年10月31日 22:21:47

前言

Android动画是android开发中非常重要的一部分,现在越来越多的产品都加入了各种酷炫的动画,作为一名Android小码农,学习Android的动画是必不可少的。

Android给我们提供了几种类型的动画:Tween动画,Frame动画,Property动画,这篇文章先介绍前两种比较简单的。

一. Tween动画

Tween动画可以对对象进行缩小,放大,旋转,渐变,位移等操作,针对这不同的操作,Android提供了相应的接口,如下图。

AlphaAnimation:实现渐入渐出的动画,比较常用的构造方法是:AlphaAnimation(float fromAlpha, float toAlpha),两个参数分别是开始时和结束时的透明度,范围是0f-1.0f。

ScaleAnimation:缩放动画,常用的构造方法:ScaleAnimation(float fromX, float toX, float fromY, float toY),参数分别表示动画开始和结束时x和y轴的缩放比例。

RotateAnimation:旋转动画,常用构造方法:RotateAnimation(float fromDegrees, float toDegrees),参数表示旋转开始和结束时角度。

TranslateAnimation:位移动画,常用构造方法:TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta),表示动画开始和结束时x,y坐标。

AnimationSet:动画的集合,可以包含多个动画,可以通过给每个动画设置启动时间(用setStartOffset方法),来决定这几个动画的执行顺序。

下面通过一个很简单的例子,看一下他们的用法,布局中只有一张图片,给这张图片分别添加这几个动画:

private ImageView mImageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mImageView = (ImageView) findViewById(R.id.image);


        AlphaAnimation alpha = new AlphaAnimation(0.2f,1.0f);
        alpha.setDuration(3000);//设置动画执行时间
//        mImageView.startAnimation(alpha);


        ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f,1.0f,0.5f,1.0f);
        scaleAnimation.setDuration(3000);
        scaleAnimation.setStartOffset(3000);//设置动画开始的时间
//        mImageView.startAnimation(scaleAnimation);


        RotateAnimation rotateAnimation = new RotateAnimation(360f,0f);
        rotateAnimation.setDuration(3000);
        rotateAnimation.setStartOffset(6000);
//        rotateAnimation.setRepeatCount(5);//设置动画执行次数
//        mImageView.startAnimation(rotateAnimation);


        TranslateAnimation translateAnimation = new TranslateAnimation(100f,0f,0f,100f);
        translateAnimation.setDuration(3000);
        translateAnimation.setStartOffset(9000);
//        mImageView.startAnimation(translateAnimation);
        
        AnimationSet set = new AnimationSet(true);
        set.addAnimation(alpha);
        set.addAnimation(scaleAnimation);
        set.addAnimation(rotateAnimation);
        set.addAnimation(translateAnimation);
        mImageView.startAnimation(set);
    }}

同时,我们也可以在xml中定义动画,我这里定义了一个缩放动画,在res/anim/目录下,创建scal_anim.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="0.5"
        android:toXScale="1.0"
        android:fromYScale="0.5"
        android:toYScale="1.0"
        android:pivotX="50%" //表示缩放的中轴点的X
        android:pivotY="50%" //表示缩放的中轴点的y,都是50%表示中轴点为图片的中心
        android:fillAfter="false" //表示动画结束后,不保持最后的状态,若为true,表示保持最后的状态
        android:duration="5000"
        />
</set>
在代码中对ImageView使用此动画,通过AnimationUtils的loadAnimator方法创建出Animation:

Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale_anim);
mImageView.startAnimation(animation);

xml的最外层是set,相当于动画的集合,它里面是可以定义多个动画的。


二. Frame动画

Frame动画是一系列图片按照顺序展示的,像gif图一样,也被称作逐帧动画,它的实现方式也非常简单,可以定义在xml中,在res/anim/目录下创建一个frame_anim.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="true">
    <item android:drawable="@drawable/image" android:duration="500" />
    <item android:drawable="@drawable/notification_template_icon_bg" android:duration="500" />
    <item android:drawable="@drawable/abc_dialog_material_background_dark" android:duration="500" />
</animation-list>
xml中必须以animation-list作为根元素,里面包含一个或多个item,其中,oneshot属性,表示动画执行的次数,true表示只执行一遍,false表示无限循环。每个item的drawable属性表示这一帧显示的图片,duration表示这一帧持续的时间。

这里同样将此动画应用到一个ImageView上,布局文件如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ImageView
        android:id="@+id/image"
        android:layout_width="300dp"
        android:layout_height="250dp"
        android:background="@anim/frame_anim"/>

</RelativeLayout>
应用此动画的时候用到AnimationDrawable类,官方文档对这个类的描述是:
An object used to create frame-by-frame animations, defined by a series of Drawable objects, which can be used as a View object's background.
它就是用来创建帧动画的,这个动画可以当作一个view的背景,java代码如下:
AnimationDrawable animation = (AnimationDrawable) mImageView.getBackground();
animation.start();

总结,这两种动画都是比较简单,而且也有一些局限性,例如,Tween动画,给人看着它在变幻,但是view的位置时没有变的,在这个view上的响应还在原来的位置,还有一些3d的旋转动画,都很难实现,不过,Android还提供了Property Animation,属性动画。

Object Animator和Tween Animation

关于安卓的动画。 分类就不详叙了,以前我只知道Frame动画、Tween动画,还耳闻过属性动画,但因为一直没用到动画,所以没去研究。 目前项目中涉及到了动画,所以做了个简单的总结,主要针对于Obj...
  • lebang08
  • lebang08
  • 2016年07月12日 11:42
  • 295

View Animator(Tween Animator)、Drawable Animator(Frame Animator)、Property Animator

1.View Animator(Tween Animator) 可以通过一个容器内执行一系列简单变化(位置,大小,透明度,旋转)等。 View动画只能够为View添加动画,它改变的是View的绘制...
  • Hi_AndG
  • Hi_AndG
  • 2016年12月17日 15:35
  • 169

android之tween动画详解

android中一共提供了两种动画,其一便是tween动画,tween动画通过对view的内容进行一系列的图像变换(包括平移,缩放,旋转,改变透明度)来实现动画效果,动画效果的定义可以使用xml,也可...
  • u012702547
  • u012702547
  • 2015年05月13日 20:04
  • 7150

android动画,Tween动画和Frame动画

Frame 动画 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XM...
  • HarryWeasley
  • HarryWeasley
  • 2015年05月13日 11:01
  • 1156

Tween动画和Frame动画

Tween动画用于操作控件 Frame动画来做作为图片的背景 动画可以以xml形式,也可以代码形式编写 首先Tween动画以xml形式加载 在res下新建anim文件夹,新建alpha.xml...
  • hyb668
  • hyb668
  • 2015年04月17日 21:19
  • 181

android tween、frame动画

动画效果 编程基础--Animation Android 动画类型 Android的 animation 由四种类型组成 XML 中 alpha ...
  • zjdzhayq
  • zjdzhayq
  • 2011年11月18日 10:09
  • 653

android动画Frame、Tween

Drawable 最强大的功能是:显示Animation。AndroidSDK介绍了2种Animation: Tween Animation(渐变动画):通过对场景里的对象不断做图像变换(平移、缩...
  • CSDNLuser
  • CSDNLuser
  • 2017年06月15日 22:24
  • 67

tween和frame 动画

Android中的动画类型有两种,一种是Tween动画、还有一种是Frame动画。Tween动画,这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;另一种Frame动画,传统的动画方法,...
  • tiny_lxf
  • tiny_lxf
  • 2017年09月05日 10:34
  • 119

Tween动画介绍

Tween动画又称“补间动画”、“中间动画”,这并不重要,就好像很多人都知道鲁迅,却不知道他叫:周树人。    Tween动画在Android中分为4类,它们分别是:AlphaAnimation(透...
  • pointerfree
  • pointerfree
  • 2011年09月15日 12:06
  • 16349

Android Tween和Frame 动画

关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放...
  • meegomeego
  • meegomeego
  • 2013年08月04日 19:11
  • 1140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android动画基础-Tween和Frame动画
举报原因:
原因补充:

(最多只允许输入30个字)