作者laugher (.。oO)
看板AndroidDev
标题[问题] 动画结束後移除ImageView的问题
时间Tue Jun 11 19:54:08 2013
我想弄成像是发射子弹的动画
每一个子弹就是一个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)
1F:推 lakestshana:试看看用RunOnUiThread中做removeview动作 06/12 23:58
2F:→ laugher:可以了, 真是感谢 06/13 12:15
3F:→ laugher:不好意思, 我刚接触Android不久, 可否请教这原理? 谢谢 06/13 12:19
4F:→ laugher:还是有点问题, 偶尔会出现没移除的情况 06/13 13:07
5F:推 lakestshana:因为UI的动作只能在MainThread做执行 06/13 20:23
6F:→ lakestshana:在子Thread 只能调用runonuithread在做UI的动作 06/13 20:25
7F:→ laugher:了解, 如果我一口气打出很多子弹的话就会开始发生移除不乾 06/13 22:55
8F:→ laugher:净的情况, 请问这是因为子Thread回传讯息来不及的关系吗? 06/13 22:55