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,属性动画。

相关文章推荐

简单的Android动画(Frame&amp;Tween)

  • 2016年07月11日 23:57
  • 263KB
  • 下载

android tween、frame动画

动画效果 编程基础--Animation Android 动画类型 Android的 animation 由四种类型组成 XML 中 alpha ...

android两种动画 Tween Animation和Frame Animation使用方法总结 (转载 写的很好)

Android SDK介绍了2种Animation: Tween Animation(渐变动画):通过对特定的对象做图像变换如平移、缩放、旋转、淡出/淡入等产生动画效果 Frame Ani...

android 帧Frame和补间Tween动画

android的动画总共有两种方式: (一)帧(Frame)动画 就是多张图片,控制好播放顺序,持续时间,从头到尾的播放,看起来就像是电视电影的画面。 实现方式: 1.新建一个Animatio...

Android 动画——Frame Animation与Tween Animation

很多手机应用的引导页都是动画的,添加动画后的应用画面会更加生动灵活,今天博主也学习了Android中Animation的使用,下面来总结下。   Android中的Animation分为两种,一种是...

Android学习笔记 :Android动画 tween,frame,property

Drawable Animation Drawable Animation( Frame Animation ): 帧动画,像放电影一样一帧帧的播放图片的形式展现动画。 在xml中实现代码: ...

关于 android Tween动画 和 frame动画的简单学习

android tween动画主要有4种,分别为  透明   比例缩放   移动  和转动        两种创建方式如下: 1.      代码里面创建  动画:      透明: ...

Android中Tween动画和Frame动画实例

Animation主要有两种动画模式:Tween动画和Frame动画 Tween动画由四种类型组成 alpha 渐变透明度动画效果 scale ...

android基础笔记——补间动画(Tween)代码实现

补间动画的代码实现,实际就是将xml中的参数用代码的方法增加,如若参照xml文件编写,较为简单。比较复杂的只有综合动画而已。 直接贴出代码,具体意义可参考上文的xml实现方式。 package c...
  • etmessi
  • etmessi
  • 2015年01月09日 20:33
  • 348
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android动画基础-Tween和Frame动画
举报原因:
原因补充:

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