Android动画--帧动画和补间动画

帧动画

  • 首先我们定义在drawable文件夹下定义一个xml文件
  • 里面包含我们要播放的动画的图片,以及每一帧动画的播放的时长
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/feiben1" android:duration="100"/>
    <item android:drawable="@mipmap/feiben2" android:duration="100"/>
    <item android:drawable="@mipmap/feiben3" android:duration="100"/>
    <item android:drawable="@mipmap/feiben4" android:duration="100"/>
    <item android:drawable="@mipmap/feiben5" android:duration="100"/>
    <item android:drawable="@mipmap/feiben6" android:duration="100"/>
    <item android:drawable="@mipmap/feiben7" android:duration="100"/>
    <item android:drawable="@mipmap/feiben8" android:duration="100"/>
</animation-list>
  • 下面就是引用我们的xml文件来显示动画了,这里我们有两种方式

1.在布局文件中引用

  • 只需要在src属性中引用相应的xml文件就可以了
    <ImageView
        android:id="@+id/image_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/run"/>
  • 注意在布局中引用,我测试的时候在5.0版本的模拟器,和我自己的手机上不会播放,换成4.4.4就可以了,我不知道是不是只有我的这样,特别说明一下

2.在代码中引用

imageView.setBackgroundResource(R.drawable.run);
                AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
                animationDrawable.start();
  • 效果图

补间动画

  • 补间动画分为四种

    位移动画 TranslateAnimation

    旋转动画 RotateAnimation

    缩放动画 ScaleAnimation

    淡入淡出动画 AlphaAnimation

  • 补间动画在res文件夹下新建anim文件夹,下面放置动画的xml文件

相关的属性

  • setDuration(long durationMills)

      设置动画持续时间(单位:毫秒)

  • setFillAfter(Boolean fillAfter)

      如果fillAfter的值为true,则动画执行后,控件将停留在执行结束的状态

  • setFillBefore(Boolean fillBefore)

      如果fillBefore的值为true,则动画执行后,控件将回到动画执行之前的状态

  • setStartOffSet(long startOffSet)

      设置动画执行之前的等待时间

  • setRepeatCount(int repeatCount)

      设置动画重复执行的次数

  • Interpolator定义了动画变化的速率,在Animations框架当中定义了一下几种Interpolator

    AccelerateDecelerateInterpolator:在动画开始与结束的地方速率改变比较慢,在中间的时候速率快。

    AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始加速

    CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线

    DecelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始减速

    LinearInterpolator:动画以均匀的速率改变

  • Interpolator一般定义在set的标签中

位移动画 TranslateAnimation

  • 相应的xml布局文件如下,其中的属性比较见简单,就不再解释
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="500"
        android:toYDelta="0"></translate>
</set>
  • 相应的代码如下
imageView2.clearAnimation();
                Animation animationTranslate = AnimationUtils.loadAnimation(this, R.anim.translateanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationTranslate);

旋转动画 RotateAnimation

  • 相应的xml文件
  • repeatCount表示重复次数,-1表示循环
  • pivotX和pivotY表示旋转的中心点,50%表示就是图片的中心
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <rotate
        android:repeatCount="-1"
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360"></rotate>
</set>
  • 相应的代码如下
imageView2.clearAnimation();
                Animation animationRotate = AnimationUtils.loadAnimation(this, R.anim.rotateanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationRotate);

缩放动画 ScaleAnimation

  • 相应的xml文件如下
  • fromXScale开始的图片比例,1表示正常大小
  • toXScale渐变的比例,2表示放大两倍
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <scale
        android:fromXScale="1"
        android:fromYScale="1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="2"
        android:toYScale="2"></scale>
</set>
  • 相应的代码如下
imageView2.clearAnimation();
                Animation animationScale = AnimationUtils.loadAnimation(this, R.anim.scaleanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationScale);

淡入淡出动画 AlphaAnimation

  • 相应的xml文件如下
  • fromAlpha表示开始的透明度,1表示不透明
  • toAlpha表示最终的透明度,0表示完全透明
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"></alpha>
</set>
  • 相应的逻辑代码如下
imageView2.clearAnimation();
                Animation animationAlpha = AnimationUtils.loadAnimation(this, R.anim.alphaanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationAlpha);

补间动画的组合使用

  • 相应的xml文件如下
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="5000">
    <alpha
        android:fromAlpha="1"
        android:toAlpha="0"></alpha>
    <rotate
        android:fromDegrees="0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toDegrees="360"></rotate>
    <translate
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="500"
        android:toYDelta="0"></translate>
</set>
  • 相应的逻辑代码如下
imageView2.clearAnimation();
                Animation animationMany = AnimationUtils.loadAnimation(this, R.anim.manyanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationMany);

补间动画的监听事件

  • 以上面的组合的补间动画为例子
  • 这里代码比较简单易懂,就不再一一解释了
                imageView2.clearAnimation();
                Animation animationMany = AnimationUtils.loadAnimation(this, R.anim.manyanimation);
                imageView2.setImageResource(R.mipmap.ic_launcher);
                imageView2.setAnimation(animationMany);
                animationMany.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        Toast.makeText(MainActivity.this, "动画开始啦", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        Toast.makeText(MainActivity.this, "动画结束啦", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        Toast.makeText(MainActivity.this, "动画重复啦", Toast.LENGTH_SHORT).show();
                    }
                });

时间: 2024-10-09 20:49:02

Android动画--帧动画和补间动画的相关文章

Android 动画系列之自定义补间动画

转载请标明出处: http://blog.csdn.net/Airsaid/article/details/51591282 本文出自:周游的博客 前言 上一篇写了补间动画的使用,由于篇幅原因,就把自定义补间动画单独拿出来了.这一篇继续写补间动画~ 在上一篇中写到了Android提供了Animation类作为补间动画的抽象基类,并提供了四个子类:ScaleAnimation .TranslateAnimation.AlphaAnimation.RotateAnimation分别实现了四种基本动画

【Android - 进阶】之Animation补间动画

补间动画也叫View动画,它只能针对View进行动画操作,且补间动画操作的只是View中可见的部分,即只操作界面,对于可点击区域等都不会进行操作. 在Android中,补间动画的顶级类是Animation.补间动画包括对View的透明度.缩放.平移.旋转进行动画操作,对应的JAVA类分别是AlphaAnimation.ScaleAnimation.TranslateAnimation.RotateAnimation. Android还提供了一个动画集合AnimationSet,可以将多个动画单体

android 动画(1) 补间动画

android动画: 3.0以前,android支持两种动画模式,tween animation,frame animation, 3.0中又引入了一个新的动画系统:property animation, 这三种动画模式在SDK中被称为 property animation,        属性动画: view animation,   补间动画:  给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变. (Tween animation) drawable animatio

Android ViewAnimation(tween animation补间动画)文档教程

XML注意事项: 在res/anim/目录下,XML文件只能有 <alpha>, <scale>, <translate>, <rotate>中一个根元素,set标签下默认动画同时进行,想要顺序进行需要startOffset元素. 注意pivotX动画中X的中间坐标,如旋转:50是指相对父View的50%,50%是相对自身View的50% 例子: <set android:shareInterpolator="false">

实现逐帧动画和补间动画两种动画效果

1.逐帧动画(Frame Animation)通常在Android项目的res/drawable/目录下面定义逐帧动画的XML模板文件.编码的时候,需要在动画模板文件的<animation-list>标签中依次放入需要播放的图片,并设置好播放的间隔时间. <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"

TimePicker控件、帧动画、补间动画

1.TimePicker控件 最近感觉每个开发平台的控件基本都差不多,在Android中控件的事件和.net控件直接写事件有一定的区别,net事件可以直接界面进行事件的绑定哈.不过在Silverlight中,如果用MVVM设计模式的话,也可以自己为控件写Command命令的,可以取代控件的事件. TimePicker控件,也就是事件控件,可以用设置时间的.在页面拖入控件后,默认是显示系统时间的. 1 <TimePicker 2 android:id="@+id/timePicker1&qu

Android 之 补间动画

补间动画的优点是可以节省空间.补间动画与逐帧动画在本质上是不同的,逐帧动画通过连续播放图片来模拟动画的效果,而补间动画则是通过在两个关键帧之间补充渐变的动画效果来实现的.目前Android应用框架支持的补间动画效果有以下5种.具体实现在android.view.animation类库中. (1)AlphaAnimation: 透明度(alpha)渐变效果,对应<alpha/>标签. (2)TranslateAnimation: 位移渐变,需要指定移动点的开始和结束坐标,对应<transl

Android动画效果——1.帧动画2.补间动画3.跳转画面(三)

Android--动画效果1.帧动画2.补间动画3.跳转画面 插值器类 xml属性值 说明 LinearInterpolator @android:anim/linear_interpolatorr 动画以均匀的速度改变. AccelerateInterpolator @android:anim/accelerate_interpolator 在动画开始时改变速度较慢,然后开始加速. AccelerateDecelerateInterpolator @android:anim/accelerat

Android基础笔记(十)- 帧动画、补间动画详解、对话框

帧动画 补间动画Tween Animation 对话框以及面试中的注意点 帧动画 帧动画很简单,我们首先看一下Google官方解释This is a traditional animation in the sense that it is created with a sequence of different images. 意思表达的很明了,一个传统的动画是由一组不同的图片组成的.帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 创建一帧动画分为一下几步(支持4