逐帧动画_逐帧动画素材 - CSDN
精华内容
参与话题
  • 逐帧动画详解一

    2015-02-11 10:12:31
    Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。 如果被定义在XML文件中,我们可以放置在/res下的anim或...

    在开始实例讲解之前,先引用官方文档中的一段话:

    Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现。

    如果被定义在XML文件中,我们可以放置在/res下的anim或drawable目录中(/res/[anim | drawable]/filename.xml),文件名可以作为资源ID在代码中引用;如果由完全由编码实现,我们需要使用到AnimationDrawable对象。

    如果是将动画定义在XML文件中的话,语法如下:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:oneshot=["true" | "false"] >  
    4.     <item  
    5.         android:drawable="@[package:]drawable/drawable_resource_name"  
    6.         android:duration="integer" />  
    7. </animation-list>  

    需要注意的是:

    <animation-list>元素是必须的,并且必须要作为根元素,可以包含一或多个<item>元素;android:onshot如果定义为true的话,此动画只会执行一次,如果为false则一直循环。

    <item>元素代表一帧动画,android:drawable指定此帧动画所对应的图片资源,android:druation代表此帧持续的时间,整数,单位为毫秒。

    文档接下来的示例我就不在解说了,因为接下来我们也要结合自己的实例演示一下这个过程。

    我们新建一个名为anim的工程,将四张连续的图片分别命名为f1.png,f2.png,f3.png,f4.png,放于drawable目录,然后新建一个frame.xml文件:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <animation-list xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:oneshot="false">  
    4.     <item android:drawable="@drawable/f1" android:duration="300" />  
    5.     <item android:drawable="@drawable/f2" android:duration="300" />  
    6.     <item android:drawable="@drawable/f3" android:duration="300" />  
    7.     <item android:drawable="@drawable/f4" android:duration="300" />  
    8. </animation-list>  
    我们可以将frame.xml文件放置于drawable或anim目录,官方文档上是放到了drawable中了,大家可以根据喜好来放置,放在这两个目录都是可以运行的。

    然后介绍一下布局文件res/layout/frame.xml:

    [html] view plaincopy
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout  
    3.   xmlns:android="http://schemas.android.com/apk/res/android"  
    4.   android:orientation="vertical"  
    5.   android:layout_width="fill_parent"  
    6.   android:layout_height="fill_parent">  
    7.   <ImageView  
    8.     android:id="@+id/frame_image"  
    9.     android:layout_width="fill_parent"  
    10.     android:layout_height="fill_parent"  
    11.     android:layout_weight="1"/>  
    12.   <Button  
    13.     android:layout_width="fill_parent"  
    14.     android:layout_height="wrap_content"  
    15.     android:text="stopFrame"  
    16.     android:onClick="stopFrame"/>  
    17.   <Button  
    18.     android:layout_width="fill_parent"  
    19.     android:layout_height="wrap_content"  
    20.     android:text="runFrame"  
    21.     android:onClick="runFrame"/>  
    22. </LinearLayout>  
    我们定义了一个ImageView作为动画的载体,然后定义了两个按钮,分别是停止和启动动画。

    接下来介绍一下如何通过加载动画定义文件来实现动画的效果。我们首先会这样写:

    [java] view plaincopy
    1. package com.scott.anim;  
    2.   
    3. import android.app.Activity;  
    4. import android.graphics.drawable.AnimationDrawable;  
    5. import android.graphics.drawable.Drawable;  
    6. import android.os.Bundle;  
    7. import android.view.View;  
    8. import android.widget.ImageView;  
    9.   
    10. public class FrameActivity extends Activity {  
    11.       
    12.     private ImageView image;  
    13.       
    14.     @Override  
    15.     protected void onCreate(Bundle savedInstanceState) {  
    16.         super.onCreate(savedInstanceState);  
    17.         setContentView(R.layout.frame);  
    18.         image = (ImageView) findViewById(R.id.frame_image);  
    19.           
    20.         image.setBackgroundResource(R.anim.frame);  
    21.         AnimationDrawable anim = (AnimationDrawable) image.getBackground();  
    22.         anim.start();  
    23.     }  
    24. }  
    看似十分完美,跟官方文档上写的一样,然而当我们运行这个程序时会发现,它只停留在第一帧,并没有出现我们期望的动画,也许你会失望的说一句:“Why?”,然后你把相应的代码放在一个按钮的点击事件中,动画就顺利执行了,再移回到onCreate中,还是没效果,这个时候估计你会气急败坏的吼一句:“What the fuck!”。但是,什么原因呢?如何解决呢?

    出现这种现象是因为当我们在onCreate中调用AnimationDrawable的start方法时,窗口Window对象还没有完全初始化,AnimationDrawable不能完全追加到窗口Window对象中,那么该怎么办呢?我们需要把这段代码放在onWindowFocusChanged方法中,当Activity展示给用户时,onWindowFocusChanged方法就会被调用,我们正是在这个时候实现我们的动画效果。当然,onWindowFocusChanged是在onCreate之后被调用的,如图:


    然后我们需要重写一下代码:

    [java] view plaincopy
    1. package com.scott.anim;  
    2.   
    3. import android.app.Activity;  
    4. import android.graphics.drawable.AnimationDrawable;  
    5. import android.graphics.drawable.Drawable;  
    6. import android.os.Bundle;  
    7. import android.view.View;  
    8. import android.widget.ImageView;  
    9.   
    10. public class FrameActivity extends Activity {  
    11.       
    12.     private ImageView image;  
    13.       
    14.     @Override  
    15.     protected void onCreate(Bundle savedInstanceState) {  
    16.         super.onCreate(savedInstanceState);  
    17.         setContentView(R.layout.frame);  
    18.         image = (ImageView) findViewById(R.id.frame_image);  
    19.     }  
    20.       
    21.     @Override  
    22.     public void onWindowFocusChanged(boolean hasFocus) {  
    23.         super.onWindowFocusChanged(hasFocus);  
    24.         image.setBackgroundResource(R.anim.frame);  
    25.         AnimationDrawable anim = (AnimationDrawable) image.getBackground();  
    26.         anim.start();  
    27.     }  
    28. }  
    运行一下,动画就可以正常显示了。

    如果在有些场合,我们需要用纯代码方式实现一个动画,我们可以这样写:

    [java] view plaincopy
    1. AnimationDrawable anim = new AnimationDrawable();  
    2. for (int i = 1; i <= 4; i++) {  
    3.     int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());  
    4.     Drawable drawable = getResources().getDrawable(id);  
    5.     anim.addFrame(drawable, 300);  
    6. }  
    7. anim.setOneShot(false);  
    8. image.setBackgroundDrawable(anim);  
    9. anim.start();  
    完整的FrameActivity.java代码如下:

    [java] view plaincopy
    1. package com.scott.anim;  
    2.   
    3. import android.app.Activity;  
    4. import android.graphics.drawable.AnimationDrawable;  
    5. import android.graphics.drawable.Drawable;  
    6. import android.os.Bundle;  
    7. import android.view.View;  
    8. import android.widget.ImageView;  
    9.   
    10. public class FrameActivity extends Activity {  
    11.       
    12.     private ImageView image;  
    13.       
    14.     @Override  
    15.     protected void onCreate(Bundle savedInstanceState) {  
    16.         super.onCreate(savedInstanceState);  
    17.         setContentView(R.layout.frame);  
    18.         image = (ImageView) findViewById(R.id.frame_image);  
    19.     }  
    20.       
    21.     @Override  
    22.     public void onWindowFocusChanged(boolean hasFocus) {  
    23.         super.onWindowFocusChanged(hasFocus);  
    24.         image.setBackgroundResource(R.anim.frame);  //将动画资源文件设置为ImageView的背景  
    25.         AnimationDrawable anim = (AnimationDrawable) image.getBackground(); //获取ImageView背景,此时已被编译成AnimationDrawable  
    26.         anim.start();   //开始动画  
    27.     }  
    28.       
    29.     public void stopFrame(View view) {  
    30.         AnimationDrawable anim = (AnimationDrawable) image.getBackground();  
    31.         if (anim.isRunning()) { //如果正在运行,就停止  
    32.             anim.stop();  
    33.         }  
    34.     }  
    35.       
    36.     public void runFrame(View view) {  
    37.         //完全编码实现的动画效果  
    38.         AnimationDrawable anim = new AnimationDrawable();  
    39.         for (int i = 1; i <= 4; i++) {  
    40.             //根据资源名称和目录获取R.java中对应的资源ID  
    41.             int id = getResources().getIdentifier("f" + i, "drawable", getPackageName());  
    42.             //根据资源ID获取到Drawable对象  
    43.             Drawable drawable = getResources().getDrawable(id);  
    44.             //将此帧添加到AnimationDrawable中  
    45.             anim.addFrame(drawable, 300);  
    46.         }  
    47.         anim.setOneShot(false); //设置为loop  
    48.         image.setBackgroundDrawable(anim);  //将动画设置为ImageView背景  
    49.         anim.start();   //开始动画  
    50.     }  
    51. }  
    展开全文
  • 除了前面《简单篇》中的背景位置切换方式外,我们也可以用多张图片呈现的方式制作逐帧动画。 首先,将每一帧动画单独保存为一个文件,这样就有了十二张图片。我们要做的就是让这十二张图片动起来。 先准备十二个div...
    除了前面《简单篇》中的背景位置切换方式外,我们也可以用多张图片呈现的方式制作逐帧动画。

    首先,将每一帧动画单独保存为一个文件,这样就有了十二张图片。我们要做的就是让这十二张图片动起来。
    先准备十二个div元素,每个元素放置一张图片:

    <div class="run">
        <div id="frame1" class="run-pic"></div>
        <div id="frame2" class="run-pic"></div>
        <div id="frame3" class="run-pic"></div>
        <div id="frame4" class="run-pic"></div>
        <div id="frame5" class="run-pic"></div>
        <div id="frame6" class="run-pic"></div>
        <div id="frame7" class="run-pic"></div>
        <div id="frame8" class="run-pic"></div>
        <div id="frame9" class="run-pic"></div>
        <div id="frame10" class="run-pic"></div>
        <div id="frame11" class="run-pic"></div>
        <div id="frame12" class="run-pic"></div>
    </div>
    

    接着,使每个div都已绝对定位的方式显示在run容器的左上角,并设置图片。注意图片的宽度和高度:

        .run{
            width: 300px;
            height: 372px;
            position: relative;
        }
        .run-pic{
            position: absolute;
            width: 300px;
            height: 372px;
            display: block;
            top: 0;
            left: 0;
        }
        #frame1{
    	background:url(images/run_01.png);
        }
        #frame2{
            background:url(images/run_02.png);
        }
        #frame3{
            background:url(images/run_03.png);
        }
        #frame4{
            background:url(images/run_04.png);
        }
        #frame5{
            background:url(images/run_05.png);
        }
        #frame6{
            background:url(images/run_06.png);
        }
        #frame7{
            background:url(images/run_07.png);
        }
        #frame8{
            background:url(images/run_08.png);
        }
        #frame9{
            background:url(images/run_09.png);
        }
        #frame10{
            background:url(images/run_10.png);
        }
        #frame11{
            background:url(images/run_11.png);
        }
        #frame12{
            background:url(images/run_12.png);
        }
    

    完成后是这样的,很多图片堆叠在了一起:
    在这里插入图片描述
    最后,就是该设计动画效果了:
    应用jQuery来实现动画效果。制作思路如下:先将十二张图片全部隐藏,然后将第一张图片显示,停留0.1秒后隐藏,第二张图片则延迟0.1秒显示,刚好接续第一张图片隐藏,第三张图片延迟0.2秒,以此类推。所有图片全部显示完毕后,第一张图片在此显示,因此,两次动画轮回时间需要延迟的时间是其余11张图片显示的时间,是1.1秒。可以创建一个 loop函数反复调用,以生成这一动画轮回,而在动画最开始,则需要通过遍历 div 元素,为每个元素设置初始的延迟值。

    <script type="text/javascript" src="jquery-3.4.1.min.js"></script>
    <script type="text/javascript">
    	$(document).ready(function() {
    		$('.run-pic').each(function(index){
    			$(this).hide(0).delay(index*100).show(0,loop);
    		});
    	});
    	
    	function loop(){
    		$(this).delay(100).hide(0).delay(1100).show(0,loop);
    	}
    </script>
    

    在以上代码中,每张图片都立即调用 hide(0) 方法,马上隐藏起来,继而通过delay()方法实现延迟,延迟的时间等于索引值乘以100,因此第一张图片延迟0毫秒,第二张图片延迟100毫秒,第三张图片延迟200毫秒…经过延迟时间后,该图片再通过调用 show() 方法来显示,此时也调用了 loop函数,是图片开始进入动画的轮回
    结合到代码具体解释为:
    对每一张图片,先立即隐藏,延迟 index * 100秒,再立即显示出来;然后再show()函数中又接了一个 loop函数。在loop函数中,图片显示出来后,延迟100毫秒,又立即隐藏,然后再延迟1100(为一个周期),又显示图片,如此进入循环
    可以发现,函数的写法其实就是把动画的每一个过程显示出来。因此,我们要仔细设计好每一个动画的步骤。
    在这里插入图片描述

    展开全文
  • (1)、Frame Animation(Drawable Animation,逐帧动画逐帧动画要求开发者吧动画过程的每张静态图片都收集起来,然后由Android系统依次显示这些图片,跟动画原理一致。&lt;1&gt;、使用步骤在res/anim下...

    1)、Frame Animation(Drawable Animation,逐帧动画

    逐帧动画要求开发者吧动画过程的每张静态图片都收集起来,然后由Android系统依次显示这些图片,跟动画原理一致。

    <1>、使用步骤

    res/anim下定义XML文件,只要在<animation-list>元素中使用<item>元素定义动画的全部帧并为每帧指定持续时间即可。如:


    Android:oneshot控制动画是否循环播放,若为true则动画不会循环播放。也可在代码中先创建animationDrawable对象,然后调用addFrame(Drawable  frame ,int dration )向该动画中添加帧,每调用一次addframe方法就向<animation-list>中加一个<item>。习惯上把定义的动画资源在布局文件中设成ImagewView的背景,然后再代码中获取animationDrawabl对象并开始动画,

    AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();    
     animationDrawable.start();

    注意:不要在onCreate中调用start,因为AnimationDrawable还没有完全跟Window相关联,如果想要界面显示时就开始动画的话,可以在onWindowFoucsChanged()中调用start()


    2)、Tween Animation(View Animation,补间动画

    <1>、概述

    补间动画就是指开发者只需指定动画开始、动画结束这两个关键帧和动画持续时间,而动画变化的其他“中间帧”则由系统计算并补齐。具体在动画中补入多少帧,什么时刻补入帧则由Interpolator类计算。

    注意:View animation只能应用于View对象,而且只支持一部分属性,如支持缩放旋转而不支持背景颜色的改变。而且对于View animation,它只是改变了View对象绘制的位置,而没有改变View对象本身,比如,你有一个Button,坐标(100,100),Width:200,Height:50,而你有一个动画使其变为Width:100,Height:100,你会发现动画过程中触发按钮点击的区域仍是(100,100)-(300,150)。

    <2>、使用步骤

    res/anim下定义XML文件,在<set>(表示以上几个动画的集合,set可以嵌套)中加入<alpha>,<scale>,<translate>,<rotate>子标签,默认情况下,set所有动画是同时进行的。然后在代码中AnimationUtils类加载动画

    Animation animation=AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
    View.startAnimation(animation);

    也可以在values/style中把动画定义在style中,然后把style应用到某个view上,如:

    bandingPopupWindow.setAnimationStyle(R.style.popupwindow_anim_style);


    <3>、XML中四种动画效果标签说明

    1)、共同属性

    1.1)、 duration:动画持续时间,时间以毫秒为单位

    1.2)、fillAfter=”true”/”false” ,是指动画结束时画面停留在此动画的第一帧; 默认值为true

    fillBefore=”true”/”false”,是指动画结束是画面停留在此动画的最后一帧。默认值为false

    FillEnable=”true”/”false”,为false 时,FillBefore 和FillAfter的值将被忽略

    1.3)、Interpolator指定一个动画的加速器,具体值如下:

    @android:anim/accelerate_interpolator: 越来越快

    @android:anim/decelerate_interpolator:越来越慢

    @android:anim/accelerate_decelerate_interpolator:先快后慢

    @android:anim/anticipate_interpolator: 先后退一小步然后向前加速

    @android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点

    @android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点

    @android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点

    @android:anim/linear_interpolator:均匀速度。

    @android:anim/lcycle_interpolator:循环播放特定的次数,变化速度按照正弦曲线改变。

    1.4)、repeatCounint型值,指定重复次数,可以为-1infinite表示无限循环。

    1.5)、RepeatMode重复模式"restart" 即重头开始重新运行 或者 "reverse"即从结束开始向前重新运行1:重新开始  2:plays backward

    1.6)、startOffset动画之间的时间间隔,从上次动画停多少时间开始执行下个动画,若为第一个动画则会在开始前停顿相应时间。

    1.7)、zAdjustment 表示动画内容在运行时在z轴上的位置,默认为normal。0:保持Z Order不变1:保持在最上层-1:保持在最下层  “normal”(保持内容当前的z轴顺序 or top 运行时在最顶层显示or bottom”(运行时在最底层显示

    1.8)、detachWallpaper=”true”/”false” ,表示是否在壁纸上运行

    1.9)、android:shareInterpolator=”true”/”false” 是否共享插入器共享时,四个子节点都用一个插入器

    2)、<alpha>

     fromAlpha:开始时透明度   

      toAlpha: 结束时透明度   

      0.0表示完全透明
    1.0表示完全不透明以上值取0.0-1.0之间的float数据类型的数字

    3)<scale>

    3.1)、fromXScale、fromYScale、toXScale 、toYScale为动画起始(结束)时,X、Y坐标上的伸缩尺寸,0.0表示收缩到没有,1.0表示正常无伸缩,值小于1.0表示收缩,值大于1.0表示放大。可以是%,也可以是具体的像素 

    android:fromYDelta="48"     从起始Y坐标,偏移48个坐标

    android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。

    android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。

    3.2)、pivotXpivotY为动画相对于物件的X、Y坐标的开始位置0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置

    4)<translate>

    fromXDeltatoXDeltafromYDeltatoYDelta为动画结束起始时 X/Y坐标上的位置,可以是%,也可以是具体的像素 。具体同<scale>的romXScale;

    5)<rotate>

      fromDegrees   动画开始时的角度   

      toDegrees     动画结束时物件的旋转角度,正代表顺时针 旋转    

      pivotX   、pivotY    属性为动画相对于物件的X/Y坐标的开始位置  从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置

    <4>、相关动画类



    <5>、自定义补间动画

    自定义动画需要继承Animation类,然后复写initialize()方法和applyTransformation (float interpolatedTime, Transformation t)方法。initialize()是一个回调函数告诉Animation目标View的大小参数,在这里可以初始化一些相关的参数,例如设置动画持续时间、设置Interpolator、设置动画的参考点等。applyTransformation (float interpolatedTime, Transformation t)函数来实现自定义动画效果,在绘制动画的过程中会反复的调用applyTransformation 函数。通过参数Transformation 来获取变换的矩阵(matrix),final Matrix matrix = t.getMatrix(),通过改变矩阵就可以实现各种复杂的效果。


    如:






    展开全文
  • 转载请注明出处:... Android中的动画,大概分为三种: 1、逐帧动画(FrameAnimation) ...2、补间动画(TweenAnimation) ...今天我们就来学习逐帧动画,废话少说直接上效果图

    转载请注明出处:http://blog.csdn.net/xiaohao0724/article/details/54582965


    Android中的动画,大概分为三种:

    1、逐帧动画(FrameAnimation)

    2、补间动画(TweenAnimation)

    3、属性动画(PropertyAnimation)


    今天我们就来学习逐帧动画,废话少说直接上效果图如下:




    帧动画的实现方式有两种:

    一、在res/drawable文件夹下新建animation-list的XML实现帧动画

    1、首先在res/drawable文件夹下添加img00-img24共25张图片

    2、新建frame_anim.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="true" >
    
        <!-- animation-list 帧动画 -->
        <!-- android:oneshot的值为 false代表播放多次,true代表只播放一次 -->
        <!-- duration代表每张图片的播放时间 ,定义一个持续时间为50毫秒的动画帧 -->
        <item
            android:drawable="@drawable/img00"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img01"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img02"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img03"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img04"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img05"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img06"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img07"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img08"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img09"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img10"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img11"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img12"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img13"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img14"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img15"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img16"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img17"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img18"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img19"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img20"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img21"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img22"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img23"
            android:duration="50"/>
        <item
            android:drawable="@drawable/img24"
            android:duration="50"/>
    
    </animation-list>

    3、在activity_main中添加控件

    <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"
        tools:context="com.havorld.frameanimation.MainActivity" >
    
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true" />
        <!-- android:background="@drawable/frame_anim" -->
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal"
            android:padding="10dp" >
    
            <Button
                android:id="@+id/start"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="播放" />
    
            <Button
                android:id="@+id/stop"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="停止" />
        </LinearLayout>
    
    </RelativeLayout>

    4、在代码中获取并开启帧动画

    public class MainActivity extends Activity implements OnClickListener {
    
    	private ImageView imageView;
    	private AnimationDrawable animationDrawable;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    
    		imageView = (ImageView) findViewById(R.id.imageView);
    		findViewById(R.id.start).setOnClickListener(this);
    		findViewById(R.id.stop).setOnClickListener(this);
    
    		setXml2FrameAnim1();
    		// setXml2FrameAnim2();
    
    	}
    
    	/**
    	 * 通过XML添加帧动画方法一
    	 */
    	private void setXml2FrameAnim1() {
    
    		// 把动画资源设置为imageView的背景,也可直接在XML里面设置
    		imageView.setBackgroundResource(R.drawable.frame_anim);
    		animationDrawable = (AnimationDrawable) imageView.getBackground();
    	}
    
    	/**
    	 * 通过XML添加帧动画方法二
    	 */
    	private void setXml2FrameAnim2() {
    
    		// 通过逐帧动画的资源文件获得AnimationDrawable示例
    		animationDrawable = (AnimationDrawable) getResources().getDrawable(
    				R.drawable.frame_anim);
    		imageView.setBackground(animationDrawable);
    	}
     
    	@Override
    	public void onClick(View v) {
    
    		switch (v.getId()) {
    		case R.id.start:
    			if (animationDrawable != null && !animationDrawable.isRunning()) {
    				animationDrawable.start();
    			}
    			break;
    		case R.id.stop:
    			if (animationDrawable != null && animationDrawable.isRunning()) {
    				animationDrawable.stop();
    			}
    			break;
    
    		default:
    			break;
    		}
    	}
    
    }
    

    二、通过代码实现帧动画

    	/**
    	 * 通过代码添加帧动画方法
    	 */
    	private void setSrc2FrameAnim() {
    
    		animationDrawable = new AnimationDrawable();
    		// 为AnimationDrawable添加动画帧
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img00), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img01), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img02), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img03), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img04), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img05), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img06), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img07), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img08), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img09), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img10), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img11), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img12), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img13), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img14), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img15), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img16), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img17), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img18), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img19), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img20), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img21), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img22), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img23), 50);
    		animationDrawable.addFrame(
    				getResources().getDrawable(R.drawable.img24), 50);
    		// 设置为循环播放
    		animationDrawable.setOneShot(false);
    		imageView.setBackground(animationDrawable);
    	}
    


    点击下载源码


    展开全文
  • 逐帧动画 资源

    2019-02-25 10:28:58
    android 动画 资源,一步一步实现android FrameAnimation 动画,让你不再为动画烦恼。
  • 逐帧动画

    2015-11-20 23:05:46
    1、需要在drawable文件夹下添加一组图片,并且写一个my_animation.xml的文件(内容如下),其中false代表循环播放,duration代表的时间间隔 ...
  • FLASH逐帧动画飞鸟素材

    热门讨论 2011-11-21 19:42:12
    如果有足够的素材,制作逐帧动画其实很简单,但是如果没有素材就要自己手绘那就不那么容易了,飞鸟素材提供了鸟飞过天空的几个动作的分解素材哦。
  • 逐帧动画是在时间帧上逐帧绘制帧内容,由于是一帧一帧的画,所以逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容。由于逐帧动画的帧序列内容不一样,不仅增加制作负担而且最终输出的文件量也很大,但它的...
  • 本文将详细介绍 Android 动画中 逐帧动画的原理 & 使用 关于Android 动画的系列文章:动画的使用,请参考文章: Android 属性动画:这是一篇很详细的 属性动画 总结&攻略 Android 动画:手把手教你使用 补间
  • 逐帧动画素材

    千次下载 热门讨论 2012-03-28 19:14:25
    网页制作素材,比如说利用js实现图片循环,使静态的图片动态化
  • 逐帧动画小鸟飞翔

    2019-01-02 12:00:08
    用于课堂讲解逐帧动画,帮助学生更好的理解什么是逐帧动画
  • 制作逐帧动画素材

    热门讨论 2014-09-24 20:18:13
    制作逐帧动画的图片素材,包括马,鸟,孙悟空,喜洋洋,机器人等
  • Flash豹逐帧动画素材

    2013-11-26 21:33:16
    逐帧动画素材 最基本的素材 初学者可以利用此做一些简单的Flash动画
  • 当我们制作一些通过属性变化无法实现的动画效果时,就需要使用逐帧动画。 现在lllustrator 矢量图绘图软件中绘制好跑步动作的每一个环节(这里我借鉴书上的图): 这里图像的每一帧内容都是 300x372像素的宽高。...
  • Android动画——逐帧动画

    千次阅读 2016-08-30 13:27:48
    1、概述 Android提供了几种动画类型:View Animation 、Drawable Animation 、Property ...Drawable Animation分为逐帧动画和补间动画。Property Animation的功能可以说是最强大的(从某种角度看,属性动画是补间动画的
  • Jquery,js的逐帧动画实现,将一帧一帧的静态图片实现动画效果demo。
  • Unity逐帧动画shader工程
  • 这篇文章不会教大家如何实现一个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式。 什么是动画 动画,顾名思义,就是能“动”的画。 人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多...
  • CSS3动画之逐帧动画

    2016-05-17 00:19:54
    什么是逐帧动画要了解 CSS3 逐帧动画,首先要明确什么是逐帧动画。看一下维基百科中的定义:定格动画,又名逐帧动画,是一种动画技术,其原理即将每帧不同的图像连续播放,从而产生动画效果。简而言之,实现逐帧动画...
  • 三种方式实现html5逐帧动画
1 2 3 4 5 ... 20
收藏数 8,598
精华内容 3,439
关键字:

逐帧动画