`
mmdev
  • 浏览: 12926374 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

Android_AnimationDrawable介绍及使用

 
阅读更多

Drawable animation可以加载Drawable资源实现帧动画。AnimationDrawable是实现Drawable animations的基本类。推荐用XML文件的方法实现Drawable动画,不推荐在代码中实现。这种XML文件存放在工程中res/drawable/目录下。XML文件的指令(即属性)为动画播放的顺序和时间间隔。

在XML文件中<animation-list>元素为根节点,<item>节点定义了每一帧,表示一个drawable资源的帧和帧间隔。下面是一个XML文件的实例:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

    android:oneshot="true">

    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />

    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />

    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />

</animation-list>

设置Android:oneshot属性为true,表示此次动画只执行一次,最后停留在最后一帧。设置为false则动画循环播放。文件可以添加为Image背景,触发的时候播放。

使用:

方式1:Drawable Animation本身就是一个Drawable资源文件,所以直接在xml中设置为指定View的背景即可。animation.start().

方式2:通过View. setBackgroundResource(resID). animation.start().

下面是一个例子:

AnimationDrawable rocketAnimation;

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
  rocketImage.setBackgroundResource(R.drawable.rocket_thrust); //roket_trust为定义的XML文件
  rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

}

public boolean onTouchEvent(MotionEvent event) {

  if (event.getAction() == MotionEvent.ACTION_DOWN) {
    rocketAnimation.start();
    return true;
  }

  return super.onTouchEvent(event);

}

注意:,一旦给指定View设置Drawable Animation之后,其BackGround就变成AnimationDrawable对象,代码如下: rocketAnimation = (AnimationDrawable) rocketImage.getBackground();

start()方法不能在onCreate()函数中调用。因为AnimationDrawable并未完全关联到Window,在onCreate()方法中,View并未完成显示(同理,在此方法中测量某个View的宽高,常得到0值。也同理SurfaceHolder要增加Callback方法)。在此如果想最快的启动动画,使用监听方法onWindowFoucsChanged().

More:突然想到,组件的宽高无法获得的原因可能是组件并未完全关联到Window测试:在此监听方法下,获取指定组件(TextView)的宽高。

Xml文件如下:

<TextView 

        android:id="@+id/textView" 

        android:layout_width="50dip" 

        android:layout_height="100dip" 

        android:text="@string/special_character" /> 

代码如下:

@Override 

    public void onWindowFocusChanged(boolean hasFocus) { 

        // TODO Auto-generated method stub 
        super.onWindowFocusChanged(hasFocus); 

        specialCharacterStr = (String) mTextView.getText(); 
        Log.d("special_character", "specialCharacterStr is :" + specialCharacterStr);       

        int width = mTextView.getMeasuredWidth(); 
        int height = mTextView.getMeasuredHeight(); 

        Log.d("window_focus", "textview width is:" + width); 
        Log.d("window_focus", "textview height is:" + height); 
    }




可以获得宽和高,即只有当View完全关联到Window的情况下,才可以获得View的宽高和给View设置背景

AnimationDrawable: android.graphic.drawable.AnimationDrawable

//获得我们xml定义的AnimationDrawable

              animDrawable=(AnimationDrawable) getResources().getDrawable(R.anim.frame_animation);

一段参考代码:

@Override

    publicvoid onWindowFocusChanged(boolean hasFocus) {

       // TODO Auto-generated method stub

       if(hasFocus) {

           imageView.setBackgroundResource(R.anim.frame_animation);

           animDrawable = (AnimationDrawable) imageView.getBackground();

           animDrawable.start();

           AlphaAnimation aas=new AlphaAnimation(0.1f,1.0f);

           //设置动画时间长度

           aas.setDuration(3500);

           //启动动画

           imageView.startAnimation(aas);

           //设置动画监听

           aas.setAnimationListener(new AnimationListener()

           {

              @Override

              publicvoid onAnimationEnd(Animation arg0) {

                  //停止帧动画

                  imageView.setVisibility(View.GONE);

                  Log.i(TAG,"FY_stop");

                  animDrawable.stop();

              }  

              @Override

              publicvoid onAnimationRepeat(Animation animation) {

              }

              @Override

              publicvoid onAnimationStart(Animation animation) {

                  //将imageView的背景设置成动画

                  imageView.setBackgroundResource(R.anim.frame_animation);

                  animDrawable = (AnimationDrawable)imageView.getBackground();

                  //设置动画透明度

                  animDrawable.setAlpha(80);

                  //启动动画

                  animDrawable.start();

              }            

           }

           );

       }  
    }	


推荐一个应用程序,大家感觉文章对你有用麻烦帮着下载顶上去:http://www.talkphone.cn/Down/Soft/Detail/49172_0.html

分享到:
评论

相关推荐

    Android中AnimationDrawable使用的简单实例

    介绍了Android中AnimationDrawable使用的简单实例,有需要的朋友可以参考一下

    Android下逐帧动画的Demo

    Android下逐帧动画的Demo,详细参见博客:http://www.cnblogs.com/plokmju/p/android_AnimationDrawable.html

    Android AnimationDrawable动画实例

    NULL 博文链接:https://gqdy365.iteye.com/blog/2179048

    Android应用通过AnimationDrawable实现View的动画效果

    AnimationDrawable是实现Drawable animations的基本类。推荐用XML文件的方法实现Drawable动画,不推荐在代码中实现。这种XML文件存放在工程中res/drawable/目录下。XML文件的指令(即属性)为动画播放的顺序和时间间隔...

    Android播放动画之使用AnimationDrawable播放帧动画工程

    使用系统带的AnimationDrawable类来播放动画必须将你需要播放的动画打成一帧一帧的图片保存起来,然后在xml文件中表示出每帧图片,这样就可以提前将资源图片加载内存中了。...

    Android之AnimationDrawable简单模拟动态图

    主要为大家详细介绍了Android之AnimationDrawable简单模拟动态图的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Android解决大量帧动画内存泄漏问题

    帧动画太多造成内存泄漏问题,内含所需的JAR包:org.apache.commons.io.IOUtils,将Inputstream转为byte字节数组,减少内存泄漏 和关键代码,仅供参考,如有建议请在下方留言或添加咨询~~~

    Android AnimationDemo_DrawableAnimation帧动画

    DrawableAnimation帧动画的Demo。其实不下载用我的代码,自己随便加上图片一样可以在你的android项目中运行。我想不要资源分了,但是现在好像不能设置为0资源分啊,最小就是2。请理解

    Android 之 Frame逐帧动画

    NULL 博文链接:https://sunzone.iteye.com/blog/1998083

    android listView复用导致item上面动画的错乱

    android listView复用导致item上面动画的错乱。网上大部分都是写的item上面显示静态图片的例子,我这个是解决显示动态图片时复用导致的动画显示错乱问题。问题描述:假如一屏可以显示10个item项,如果第一个正在播放...

    疯狂Android讲义源码

     1.1.2 Android平台架构及特性 3  1.2 搭建Android开发环境 5  1.2.1 下载和安装Android SDK 5  1.2.2 安装Eclipse和ADT插件 7  1.3 Android常用开发工具的用法 10  1.3.1 创建、删除和浏览AVD 10  1.3.2 ...

    点击动画AnimationDrawable、无限转动RotateAnimation

    点击动画AnimationDrawable、无限转动RotateAnimation

    Android 播放Gif图片动画【源代码】.rar

    Android 播放Gif图片动画【源代码】,在Android 中是不支持直接使用Gif 图片关联播放帧动画,Android 提供了另外一种解决的办法,就是使用AnimationDrawable 这一函数使其支持逐帧播放,我们使用一款动画分割软件...

    Android使用动画设置ProgressBar进度的方法

    需求场景:当我们在使用ProgressBar的时候,希望有进度加载的效果,此时我们传统的做法是使用Thread线程来实现,下面我们用属性动画来实现,简单粗暴。。哈哈哈 布局文件: &lt;?xml version=1.0 encoding=utf-8?&...

    Android代码-SilkyAnimation

    用SurfaceView来播放帧动画,避免在很多帧的情况下使用AnimationDrawable带来的OOM和卡顿问题。支持任意多帧的动画。 使用 Usage Gradle引入 implementation 'com.yuyashuai.android:silkyanimation:1.1.6' 用法 ...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    《疯狂Android讲义(第2版)》.(李刚).源代码 疯狂Android讲义目录结构: 第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本...

    Android之泡泡效果bubble.rar

    import android.graphics.drawable.AnimationDrawable; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; ...

    japng_android:Android库,用于将动画PNG文件合成到Drawable对象中

    底层的PNG处理由完成,而japng_android使用Canvas合成帧并生成最终的Drawable以在View使用。 简单用法 Drawable d = PngAndroid.readDrawable(this, R.drawable.rotating_logo); ImageView iv = (ImageView)...

Global site tag (gtag.js) - Google Analytics