Android animation 动画背景图自动播放的实现和不能播放问题解决

转载 2016年10月11日 19:42:18

http://www.cnblogs.com/firecode/archive/2012/11/01/2749774.html

Android动画背景图自动播放的实现
我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 例如:
<?xml version="1.0" encoding="utf-8"?>
<animation-list android:oneshot="false"  
xmlns:android="http://schemas.android.com/apk/res/android">  
  <item android:duration="100" android:drawable="@drawable/loading_1" />  
  <item android:duration="100" android:drawable="@drawable/loading_2" />  
  <item android:duration="100" android:drawable="@drawable/loading_3" />  
  <item android:duration="100" android:drawable="@drawable/loading_4" />  
  <item android:duration="100" android:drawable="@drawable/loading_5" />  
  <item android:duration="100" android:drawable="@drawable/loading_6" />  
  <item android:duration="100" android:drawable="@drawable/loading_7" />  
  <item android:duration="100" android:drawable="@drawable/loading_8" />  
  <item android:duration="100" android:drawable="@drawable/loading_9" />  
  <item android:duration="100" android:drawable="@drawable/loading_10" />  
  <item android:duration="100" android:drawable="@drawable/loading_11" />  
  <item android:duration="100" android:drawable="@drawable/loading_12" />  
</animation-list>   

不过大多数朋友都会遇到的问题是,动画是做好了,但是界面在加载的时候,动画并不会自动播放,还得通过屏幕点击等事件来触发,这就失去了意义了,实际上,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();
        }
});

注意:此处一定要用getBackground();不能用getdrawable()方法,会没效果。原因如下:

由于我们使用的是imageView的setBackgroundResource方法设置的资源背景,相当于布局文件中的android:background属性,这个属性是view类的属性,必须通过getBackground()方法来获取;而getdrawable()是imageview类的方法,必须通过在代码中setImageResource(int)(对应布局文件的android:src)setImageDrawable(Drawable drawable)方法设置才可以使用getdrawable()方法。
(详情参考帖子:http://www.eoeandroid.com/forum. ... 1&extra=#pid1627412

方法二:使用AsyncTask异步加载启动
imageView.setBackgroundResource(R.anim.xxxxx);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
RunAnim runAnim=new RunAnim();
runAnim.execute("");

class RunAnim extends AsyncTask<StringStringString{
        @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();  

 //注意这里,如果你的图片控件用的是setImageResource ,你这里应该使用getDrawable(); 
imageView.getViewTreeObserver().addOnPreDrawListener(preDrawListener);

OnPreDrawListener preDrawListener = new OnPreDrawListener(){
    @Override
    public boolean onPreDraw() {
        animationDrawable.start();
        return true//必须要有这个true返回
    }
};

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


解决使用AnimationDrawable无法播放动画的问题

第一种方式启动帧动画:(在Activity启动时会自动运行动画) AnimationDrawable ad; ImageView iv = (ImageView) findViewById(R...
  • carterjin
  • carterjin
  • 2012-07-04 11:02:05
  • 7298

Android 解决逐帧动画不能自动播放问题

ImageView 图片逐帧动画,可参考用作登录界面,显示进度等 注:ad.start();不能放在OnCreate方法里面,否则动画不会正常播放,只会停留在第一帧.应该是ImageView还没有完...
  • java886o
  • java886o
  • 2011-10-17 17:10:59
  • 1387

android的ImageView动画自动播放

ImageView的动画在部分手机上会自动播放,比较奇怪,就在网上找了找解决办法。转自 animation-list-animationdrawable-autostart 自动播放:...
  • aotian16
  • aotian16
  • 2016-07-27 16:34:37
  • 1598

Android图片实现动画(解决TranslateAnimation的残影问题)

package com.zz.zwt.week6;import android.animation.ObjectAnimator; import android.content.Context; ...
  • zhao_1111
  • zhao_1111
  • 2016-08-02 07:27:04
  • 974

Android Drawable 那些不为人知的高效用法

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/43752383,本文出自:【张鸿洋的博客】1、概述Drawable在我们平时的开发...
  • lmj623565791
  • lmj623565791
  • 2015-02-26 09:21:13
  • 166584

Android动画失效

记今天在应用中使用开源控件FloatingActionButton时,弹出按钮的动画失效(即没有播放动画效果)。 调试了很久后发现,动画的失效居然是FragmentViewPagerAdapter中的...
  • tomatomas
  • tomatomas
  • 2016-11-29 20:19:49
  • 1128

Android 布局显示消失动画

序: 安卓布局显示和消失动画加载方式有两种,一种是通过xml布局,另一个是代码实现。 xml布局方式: xml: 在res-anim文件夹下面添加: alpha_in.xml //从上...
  • u012246458
  • u012246458
  • 2016-08-03 09:40:54
  • 3309

Android 背景动画

1、先创建动画层,有三张图片
  • lovoo
  • lovoo
  • 2016-06-17 22:22:11
  • 1762

Android视频背景,动态背景,Android用视频做背景的轻松实现

之前有看过Keep里面不错的登陆页面的视频背景效果,做项目的时候,客户也提出了这个需求,网上找了很多,有的也很好,但很多不是很完整。 工作之余,把这个小Demo整理一下,方便日后使用先看看效果注意事...
  • w630886916
  • w630886916
  • 2017-04-17 17:37:12
  • 6217

Android-实现背景渐变动画

这是一篇关于如何实现渐变动画背景的简易教程。要实现这种效果,我们需要的是AnimationList.首先我们需要创建五个渐变的Drawable资源文件,如下: ...
  • z82367825
  • z82367825
  • 2017-04-25 11:59:25
  • 1816
收藏助手
不良信息举报
您举报文章:Android animation 动画背景图自动播放的实现和不能播放问题解决
举报原因:
原因补充:

(最多只允许输入30个字)