`
Tony_Lee-S
  • 浏览: 82844 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android逐帧动画(转)

阅读更多
Android有两种动画,一种是tweened animation(渐变动画) ,主要用于控件的,大小缩放,透明度等,另一种是frame by frame(逐帧动画),也就是我今天要讨论的动画。逐帧动画顾名思义就是一帧一帧的播放动画,就像动画片的播放原理一样,它是通过不挺得替换图片,当替换图片的速度大于人眼的反应时间时就会给人一种画面在动的感觉。

废话不多说直接上代码:

1:在res文件夹下面建立一个文件夹anim;

2:在anim文件夹下建立一个文件firefox_animation.xml(名字自己任意定义)如下:
<?xml version="1.0" encoding="utf-8"?>  
<animation-list       
    xmlns:android="http://schemas.android.com/apk/res/android"     
    android:oneshot="false">
       <item android:duration="300" android:drawable="@drawable/home_hotapp" />
        <item android:duration="300" android:drawable="@drawable/home_hotapp_click" />
</animation-list>

说明:你想变多少张图片就要有几个item,在每一个item中 duration是定义这张图片存在的时间以毫秒为单位,drawable是图片的路径
3:定义布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content" android:layout_height="wrap_content"
      android:orientation="vertical">
      <ImageView android:id="@+id/imageview1" android:layout_width="100px"
           android:layout_height="100px" android:src="@anim/firefox_animation">
      </ImageView>
      <Button android:id="@+id/start" android:layout_width="fill_parent"
           android:layout_height="wrap_content" android:text="Start">
      </Button>
      <Button android:id="@+id/start_once" android:layout_width="fill_parent"
           android:layout_height="wrap_content" android:text="Start_once">
      </Button>
</LinearLayout>

4:Activy中的代码:
    
public class MainA extends Activity {
    private AnimationDrawable draw = null;
    private Button start = null;
    private Button startOnce = null;
    private boolean isoneshot = true;

    public void onCreate(Bundle bundle)
    {
     super.onCreate(bundle);
     this.setContentView(R.layout.main);
     ImageView view = (ImageView)findViewById(R.id.imageview1);
     draw = (AnimationDrawable)view.getDrawable();
     start = (Button)findViewById(R.id.start);
     start.setOnClickListener(new OnClickListener()
     {

      public void onClick(View v) {
       // TODO Auto-generated method stub
       startAnimation();
      }
     });
     startOnce = (Button)findViewById(R.id.start_once);
     startOnce.setOnClickListener(new OnClickListener()
     {

      public void onClick(View v) {
       // TODO Auto-generated method stub
       if(isoneshot)
       {
        startOnce.setText("startOnce");
       }
       else
       {
        startOnce.setText("Play Repace");
       }
       draw.setOneShot(isoneshot);
       isoneshot = !isoneshot;
      }
     });
    }

    private void startAnimation()
    {
     if(draw.isRunning())
     {
      draw.stop();
     }
     else
     {
      draw.stop();
      draw.start();
     }
    }
   }

5:完成点击start按钮动画开始。
问题来了,如果我想不需要点击按钮,一进入Activity就让动画动起来怎么办?
聪明的同学肯定会说直接把startAnimation()方法放到onCreate()方法中不就可以了吗,甚至还会有同学说在onCreate()方法中代码只会在创建的时候执行,应该是放到onResume()方法中,这样无论怎么样代码都会执行,动画效果都会出来,事实上呢?要相信科学少年,结果是什么,勤奋的同学自己44就知道了。
如果想要在一进入页面的时候就执行动画我们就要对代码做一个小小的修改,同时我们去掉了那两个按钮。
其他的部分不变代码如下:
publicclass Main2 extends Activity {

    private AnimationDrawable draw = null;

    publicvoid onCreate(Bundle bundle) {
       super.onCreate(bundle);
       this.setContentView(R.layout.main);
       ImageView view = (ImageView) findViewById(R.id.imageview1);
       view.setBackgroundResource(R.anim.firefox_animation);
       draw = (AnimationDrawable) view.getBackground();
       view.getViewTreeObserver().addOnPreDrawListener(opdl);
    }

    OnPreDrawListener opdl=new OnPreDrawListener(){
        publicboolean onPreDraw() {
             draw.start();
                returntrue;
        }
};
}

运行之后您会惊喜的发现,动画执行了。

小弟浅见:应该是在onCreate()方法中AnimationDrawable虽然初始化了,但是并没有完全,动画只会走一帧,永远停在第一张图片上,加入ViewTreeObserver观察者,ViewTreeObserver能够一直监听LayoutTree中的布局绘制情况,而OnPreDrawListener他在图片初始化完了之后会自动执行回调方法OnPreDrawListener,这样动画就动起来。

以上就是我使用逐帧动画时的一些小心得,有什么不对的地方还请各位大虾指点,谢谢。
转自:http://blog.csdn.net/gzhan1603/article/details/7576667
分享到:
评论

相关推荐

    android 逐帧动画实现 源码

    在Android开发中,逐帧动画是一种常见的动画效果,它通过连续播放一系列静态图像来创造出动态效果,类似于传统的电影制作方式。本源码着重探讨如何在Android应用中实现逐帧动画。 首先,我们要了解Android中的两种...

    android逐帧动画

    在这个特定的案例中,我们看到标题为“android逐帧动画”,描述提到有三张图片进行切换,每帧持续时间为50毫秒。这个例子展示了如何在Android应用中实现这种基本的动画效果。 首先,我们需要了解Android中的`...

    android 逐帧动画

    "逐帧动画"是Android动画系统中的一个基础概念,尤其适用于创建连续动态效果,如人物行走、物体旋转等。本教程将深入探讨逐帧动画的工作原理、实现方式以及如何在实际项目中运用。 逐帧动画是一种通过连续播放一...

    Android 逐帧动画源码.zip

    在Android应用开发中,逐帧动画是一种常见的动画形式,它通过连续播放一系列静态图像来创造出动态效果,类似于传统的动画制作过程。"Android 逐帧动画源码.zip" 提供了一个项目实例,帮助开发者深入理解这一技术。这...

    逐帧动画 资源

    下面我们将深入探讨如何在Android中实现逐帧动画,并了解相关知识点。 一、FrameAnimation简介 FrameAnimation是Android SDK提供的一种基于图像序列的动画机制,它通过在ImageView组件中连续显示一系列的静态图像来...

    Android Animation Frame逐帧动画2

    Android提供了多种动画类型,其中包括 Tween 补间动画和 Frame 逐帧动画。本篇文章将主要聚焦于Frame动画,这是一种通过连续显示不同帧图片来创建动画效果的技术。 **Frame动画原理:** Frame动画基于一系列连续的...

    Android 逐帧动画源码.rar

    在Android应用开发中,逐帧动画是一种常见的动画形式,它通过连续播放一系列静态图像来创造出动态效果。这个"Android 逐帧动画源码.rar"压缩包包含了一个关于如何实现这种动画方式的源代码示例。下面,我们将深入...

    Android 逐帧动画示例

    在Android中,逐帧动画可以通过`AnimationDrawable`类来实现。`AnimationDrawable`是一个可绘制对象,可以作为视图的背景,并且可以像动画一样顺序播放其包含的帧。以下将详细介绍如何创建和使用逐帧动画。 首先,...

    Android逐帧动画源码.zip

    这个"Android逐帧动画源码.zip"文件包含了一个关于如何在Android应用中实现逐帧动画的示例项目,这对于开发者来说是宝贵的参考资料。 逐帧动画在Android中的实现主要依赖于`Animation`类家族,尤其是`Frame...

    Android逐帧(Frame)动画

    本篇文章将深入探讨Android逐帧动画的概念、实现方式以及相关的实践技巧。 逐帧动画的工作原理类似于传统的电影制作,通过连续播放多张图片来产生连续的动作。在Android中,这可以通过`AnimationDrawable`类来实现...

    Android 逐帧动画的小例子

    首先,我们要理解Android中的逐帧动画。在Android中,帧动画(Frame Animation)是一种简单易用的动画形式,它通过连续播放一系列静态图像(帧)来创造出动画效果。这些帧通常保存为图片资源(如PNG或JPEG),然后在...

    逐帧动画源码

    在Android开发中,逐帧动画是一种常见的2D动画形式,尤其适用于游戏开发或者复杂的动态效果展示。本资源“逐帧动画源码”旨在提供一个深入理解逐帧动画工作原理的实例,帮助开发者快速掌握Android系统中如何实现这种...

    Android 逐帧动画源码.zip源码资源下载

    在Android开发中,逐帧动画是一种常见的动画效果,它通过连续播放一系列静态图像来创造出动态效果,类似于传统的电影制作方式。本资源包“Android 逐帧动画源码.zip”提供了实现这种动画效果的源代码,适合对Android...

Global site tag (gtag.js) - Google Analytics