-1

如果我使用handler.postDelayed以下顺序(延迟startAnimation):

animFadeout = AnimationUtils.loadAnimation(getApplicationContext(),
            R.anim.disappear);
animFadeout.setAnimationListener(this);
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override
    public void run() { 
    txtMessage.startAnimation(animFadeout);
         } 
    }, 4000);

然后一切顺利。但是,如果我更改顺序(延迟loadAnimation):

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override
    public void run() { 
    animFadeout = AnimationUtils.loadAnimation(getApplicationContext(),
                    R.anim.disappear);
         } 
    }, 4000);
    animFadeout.setAnimationListener(this);
    txtMessage.startAnimation(animFadeout);

应用程序崩溃并显示消息“不幸的是,我的应用程序已停止工作”。我很好奇这个结果的原因......谢谢

4

1 回答 1

0

问题在于

animFadeout.setAnimationListener(this);

由于您正在线程中创建 animFadout(尚未运行),因此 animFadeout 仍然为空。您应该在 LogCat 消息中收到 NullPointerException。

您是否尝试过将所有 3 条语句都放在 Runnable 中?

于 2013-08-14T20:05:08.197 回答