IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Android动画背景图自动播放的实现

Michael`s blog 2012-06-19 23:52:17 累计浏览 3,323 次
本机暂存

   我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。

   不过大多数朋友都会遇到的问题是,动画是做好了,但是界面在加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,这就失去了意义了,实际上,android的动画AnimationDrawable 组件里面有个start()方法用于启动动画播放,但是这个方法不能直接写在onClick,onStart,onResume里面,写进去也是无效的,无法启动动画,只能写在比如事件监听当中,于是我们可以使用点小技巧来实现自动播放

   目前我知道的有三种方法:

ImageView imageView = (ImageView)findViewById(R.id.xxx);

   方法一:使用Runnalbe()来加载

imageView.setBackgroundResource(R.anim.xxxxx);

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

   imageView.post(new Runnable() {

     @Override

         public void run()  {

             animationDrawable.start();

         }

   });

   方法二:使用AsyncTask异步加载启动

imageView.setBackgroundResource(R.anim.xxxxx);

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

   RunAnim runAnim=new RunAnim();

   runAnim.execute(\"\");

   class RunAnim extends AsyncTask {

         @Override

         protected String doInBackground(String... params) {

             if (!animationDrawable.isRunning()) {

                 animationDrawable.stop();

                 animationDrawable.start();

             }

             return \"\";

         }

   }

   方法三:通过添加addOnPreDrawListener来自动加载

imageView.setBackgroundResource(R.anim.xxxxx);

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

   imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);

   OnPreDrawListener preDrawListener = new OnPreDrawListener(){

     @Override

     public boolean onPreDraw() {

         animationDrawable.start();

         return true; //必须要有这个true返回

     }

   };

   以上三种方法经过测试没有问题,另外网上有一些说使用重写Activity的onWindowFocusChanged()方法来实现,但是还是有不足,得改变焦点才能触发,虽然理论可以自动实现改变焦点,感觉还是不甚可取。

同分类推荐文章

  1. 「置顶」我做了什么 (2026-05-05 12:13:28)
  2. 万字长文推演:手机不再从 App 开始,Agent OS 如何接管任务入口 (2026-04-28 14:57:22)
  3. Android Perfetto 系列 10 - Binder 调度与锁竞争 (2025-11-16 15:33:30)

查看更多 移动开发 文章 →

建议继续学习

  1. 情绪版(Mood board)操作流程的新思考 (累计阅读 41,753)
  2. android 开发入门 (累计阅读 19,527)
  3. Android 连接SSID隐藏网络以及 LEAP 认证的方法 (累计阅读 9,539)
  4. 让安卓手机通过代理翻墙的方法 (累计阅读 9,116)
  5. 手机产品设计方向 (累计阅读 7,953)
  6. 实时监控Android设备网络封包 (累计阅读 6,557)
  7. Eclipse开发Android应用程序入门:重装上阵 (累计阅读 6,459)
  8. 基于 PhoneGap 与 Java 开发的 Android 应用的性能对比 (累计阅读 6,409)
  9. Android用户界面设计:表格布局 (累计阅读 6,186)
  10. Windows下使用VMware安装Android (累计阅读 5,631)