美文网首页
Android 动画之AnimationDrawable 的简单

Android 动画之AnimationDrawable 的简单

作者: 总会颠沛流离 | 来源:发表于2019-07-10 17:05 被阅读0次
    一:效果图
    xue.gif

    二:使用

    第一步drawable目录下建一个xml

     <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android">                                  
      <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading02"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading03"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading04"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading05"
        android:duration="100" />
    <item
        android:drawable="@mipmap/ic_pull_to_refresh_loading06"
        android:duration="100" />
    </animation-list>
    

    相关属性方法:

    oneshot:设置是否循环播放,false为循环播放!!! duration:帧间隔时间,通常我们会设置为300毫秒 我们获得AniamtionDrawable实例后,需要调用它的start()方法播放动画,另外要注意 在OnCreate()方法中调用的话,是没有任何效果的,因为View还没完成初始化,我们可以 用简单的handler来延迟播放动画!当然还有其他的方法,使用(下面我将用到)AnimationDrawable来实现帧动画真的是非常方便的~

    第二步:activity_main.xml设置下src,然后MainActivity中:

       package com.example.guide;
    
      import android.graphics.drawable.AnimationDrawable;
      import android.graphics.drawable.Drawable;
      import android.os.Bundle;
      import android.os.Handler;
      import android.support.v7.app.AppCompatActivity;
     import android.widget.ImageView;
    
    
    public class MainActivity extends AppCompatActivity {
    
    private ImageView mIamge;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        final AnimationDrawable drawable = (AnimationDrawable) mIamge.getDrawable();
        Handler handler=new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                drawable.start();
            }
        },300);
    
    }
    
    private void initView() {
        mIamge = (ImageView) findViewById(R.id.iamge);
    }
    }
    

    三:Android AnimationDrawable运行的几种方式

    项目开发用到了AnimationDrawable,调用start后没有运行,很纳闷。google搜了下。记录一下。

    这个AnimationDrawable.start不能直接写在onClick,onStart,onResume里面,是无效的,无法启动动画,只能写在比如事件监听当中。

    以下有几种运行AnimationDrawable的方式。
    第一种:在事件监听中start AnimationDrawable 下面一个例子举例 当一个视图树将要绘制时产生事件
    AnimationDrawable ad;
    ImageView iv = (ImageView) findViewById(R.id.animation_view);
    iv.setBackgroundResource(R.drawable.animation);
    ad = (AnimationDrawable) iv.getBackground();
     iv.getViewTreeObserver().addOnPreDrawListener(opdl);
    
      OnPreDrawListener opdl=new OnPreDrawListener(){
       @Override
        public boolean onPreDraw() {
                   ad.start();
                   return true; //注意此行返回的值
       }
        };
    
    第二种方式启动动画:(在Activity启动时会自动运行动画)
       ImageView image = (ImageView)         findViewById(R.id.animation_view);
      image.setBackgroundResource(R.anim.oldsheep_wait);
        animationDrawable = (AnimationDrawable) image.getBackground();
        RunAnim runAnim=new RunAnim();
        runAnim.execute("");
    
      class RunAnim extends AsyncTask<String, String, String>
      {
        @Override
        protected String doInBackground(String... params)
        {
            if (!animationDrawable.isRunning())
            {
                animationDrawable.stop();
                animationDrawable.start();
            }
            return "";
        }
        }
    
    第三种方式启动动画:(在Activity启动时会自动运行动画)
      ImageView image = (ImageView)         findViewById(R.id.animation_view);
      image.setBackgroundResource(R.anim.oldsheep_wait);
      animationDrawable = (AnimationDrawable)         image.getBackground();
      image.post(new Runnable()
      {
    @Override
    public void run()
    {
        animationDrawable.start();
    }
      });
    
    第四种方式启动动画:(在Activity启动时会自动运行动画)
      ImageView image = (ImageView) findViewById(R.id.animation_view);
      image.setBackgroundResource(R.anim.oldsheep_wait);
      animationDrawable = (AnimationDrawable) image.getBackground();
    
      @Override
      public void onWindowFocusChanged(boolean hasFocus)
      {
    animationDrawable.start();
    super.onWindowFocusChanged(hasFocus);
     }
    

    相关文章

      网友评论

          本文标题:Android 动画之AnimationDrawable 的简单

          本文链接:https://www.haomeiwen.com/subject/zfyhkctx.html