[問題] 動畫結束後移除ImageView的問題
我想弄成像是發射子彈的動畫
每一個子彈就是一個ImageView
問題出在子彈若連發(第一發動畫未結束第二發就跟著打出去)程式就當掉
出現NullPointerException的錯誤
但如果第一發動畫結束後再發射第二發就沒有問題
雖然知道出錯在程式哪一行,但確不知道為什麼錯
程式碼架構大至上是這樣
/* fl_anim 被包在 fl_base 裡 */
FrameLayout fl_base = (FrameLayout) getLayoutInflater().inflat.....(略)
FrameLayout fl_anim = (FrameLayout) fl_base.findViewById.....(略)
//用來判斷動畫結束的是哪個 ImageView
Map<Animation, ImageView> hmap = new HashMap<Animation, ImageView>();
public void shoot() {
ImageView imgv_bullet = new ImageView(this);
/* imgv_bullet 的基本設定...(略) */
fl_anim.addView(imgv_bullet);
TranslateAnimation ta = new TranslateAnimation(0, 100, 0, 100);
/* ta 的基本設定...(略) */
ta.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation an) {
ImageView imgv = hmap.get(an);
//導致程式當掉的這行
fl_anim.removeView(imgv);
}
/* 其它事件沒更動...(略) */
}
);
hmap.put(ta, imgv_bullet);
imgv_bullet.startAnimation(ta);
}
為了測試,我先把出錯的那行註掉
結果子彈連發很順利,只是發完後就停在畫面上無法消失
原本以為是 Listener 裡面的 imgv 沒正確抓到
所以我用 imgv.setX(300) 來測,結果所有的點(imgv)不管有沒有連發都正確執行
而且也不可能是 fl_anim 變 NullPointer,因為子彈有正常出現
換句話說所有的值都有正確抓到
錯誤訊息裡提到的錯誤程式地點也都不在我的程式裡
可否請問問題到底出在哪裡?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.72.155
※ 編輯: laugher 來自: 140.116.72.155 (06/11 20:01)
推
06/12 23:58, , 1F
06/12 23:58, 1F
→
06/13 12:15, , 2F
06/13 12:15, 2F
→
06/13 12:19, , 3F
06/13 12:19, 3F
→
06/13 13:07, , 4F
06/13 13:07, 4F
推
06/13 20:23, , 5F
06/13 20:23, 5F
→
06/13 20:25, , 6F
06/13 20:25, 6F
→
06/13 22:55, , 7F
06/13 22:55, 7F
→
06/13 22:55, , 8F
06/13 22:55, 8F