エフェクトをAnimatedSpriteで作っていて、「アニメーションが終わったら削除したい」という時に調べていたら見つけた方法です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//アニメーション終了時に削除する animationSprite.animate(60, false, new IAnimationListener(){ @Override public void onAnimationStarted(AnimatedSprite pAnimatedSprite, int pInitialLoopCount) { } @Override public void onAnimationLoopFinished(AnimatedSprite pAnimatedSprite, int pRemainingLoopCount, int pInitialLoopCount) { } @Override public void onAnimationFrameChanged(AnimatedSprite pAnimatedSprite, int pOldFrameIndex, int pNewFrameIndex) { } @Override public void onAnimationFinished(AnimatedSprite pAnimatedSprite) { //onAnimationFinishedでdetachする時は //別スレッドで削除しないとエラーになる getBaseActivity().runOnUpdateThread(new Runnable(){ public void run(){ animationSprite.detachSelf(); animationSprite.dispose(); animationSprite = null; } }); } }); |
他にもTimerHandlerを使って指定時間後に処理する方法があるみたいだけど、Listenerで「終わったら処理する」とした方がスマートな気がします。
アニメーション開始時にも処理を追加できるし、こっちの方が何かと便利なのではないでしょうか。