我现在在写的app有一个ViewPager,其中一页放的是GridView,
GridView中的每个item都放一个ImageView来播不同的动画。
因此每次滑到那一页附近都会很卡(ViewPager会预读左右两页)
本来要播逐帧动画很简单,在xml里面用<animation-list>加入每一帧,
再用ImageView.setBackgroundResource设置动画
最后再透过AnimationDrawable开始播放动画 http://ppt.cc/qSnV
但是我发现在setBackgroundResource的时候UIThread会被卡住,
应该是同时播放太多动画的关系,或是动画张数太多。
但是setBackgroundResource又必须runOnUiThread。
所以我试着在Thread里面先把动画用resource.getDrawable拿出来,
再用setImageDrawable设置动画给ImageView。
但是我又发现,getDrawable这个函式明明在Thread里做却还是会挡到UIThread
因为拿动画跟设动画分开来做所以稍微没这么卡了,但是还是不能接受。
最后只能在Thread里面自己new一个AnimationDrawable,用addFrame一张一张把图加进去
再透过ImageView.post回到UIThread才能setImageDrawable。
效果只能说是差强人意,滑到那一页都还是会顿一下。
请问一下要播放逐帧动画有没有效率更好的方式?