我現在在寫的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。
效果只能說是差強人意,滑到那一頁都還是會頓一下。
請問一下要播放逐幀動畫有沒有效率更好的方式?