注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

早衰男的巢

大音希声 道隐无名

 
 
 

日志

 
 

Android笔记:在ListView中的AnimationDrawable 动画不动的解决办法。  

2014-05-22 16:22:20|  分类: android笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
【背景】
在一个自定义Adapter的listview中,有个4帧的动画。用在适配器里用 AnimationDrawable.start() 的方法没有效果,不能让动画动起来。
myAdapter.class

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

//上下文略……

ImageView aniPlay = (ImageView) view.findViewById(R.id.imageView_listitem_aniplay); //动画对象
final AnimationDrawable ani = (AnimationDrawable) aniPlay.getBackground(); //xml是设置为aniPay的background的,如果是src应该用 getDrawable()


ani.start(); //<<<<<<<没有效果,动画不动


}

逐帧动画的xml和layout.xml就不贴了

【原因】
长话短说,问题的原因官方有解释。在onCreate() 中或其他初始化的场合下,不适用 AnimationDrawable 的 start 或 run 方法。因为 定义分帧的 drawable xml文件可能未能及时把各帧的资源及时加载。


【解决办法】
在adapter里,用handler.postdelay(); 触发,动画播放的命令就会排到去资源准备好后执行。(可以用post(),我用postdelay并加上延时..只是手贱)
代码如下

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

//上下文略……

ImageView aniPlay = (ImageView) view.findViewById(R.id.imageView_listitem_aniplay); //动画对象

final AnimationDrawable ani = (AnimationDrawable) aniPlay.getBackground(); //xml是设置为aniPay的background的,如果是src应该用 getDrawable()

Handler mHandler = new Handler();

mHandler.postDelayed(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
ani.start();

}
}, 300);

}


【参考文章】

http://blog.csdn.net/dezhizeng/article/details/8874911
  评论这张
 
阅读(1209)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018