Android 不可运行的代码在内部执行

Android 不可运行的代码在内部执行,android,Android,我想在这里实现的是将视图设置为可见,并让其停留3秒钟,然后逐渐消失。我通过定时器、处理程序和runnable来实现这一点。以下是我的代码: mIntroLayer.setVisibility(View.VISIBLE); final Runnable animationRunnable = new Runnable() { public void run() { mIntroLayer.startAnimation(mFadeAwayAnimation); }

我想在这里实现的是将视图设置为可见,并让其停留3秒钟,然后逐渐消失。我通过定时器、处理程序和runnable来实现这一点。以下是我的代码:

mIntroLayer.setVisibility(View.VISIBLE);

final Runnable animationRunnable = new Runnable() {
    public void run() {
        mIntroLayer.startAnimation(mFadeAwayAnimation);
    }
};
final Handler animationHandler = new Handler();

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        animationHandler.post(animationRunnable);
    }
}, 3 * 1000);

mIntroLayer.setVisibility(View.INVISIBLE);

然而,现在的情况是,介绍层在3秒钟内不可见,然后出现并消失。似乎mIntroLayer.setVisibility(View.VISIBLE)语句是在runnable内部执行的。有人知道这是为什么吗?谢谢

这就是您的代码现在真正在做的事情:

mIntroLayer.setVisibility(View.VISIBLE);
//... schedule the animation
mIntroLayer.setVisibility(View.INVISIBLE);
在动画结束后,应使用以下方法将视图设置为不可见:

mFadeAwayAnimation.setAnimationListener(new Animation.AnimationListener() {
    public void onAnimationEnd(Animation animation) {
        mIntroLayer.setVisibility(View.INVISIBLE);
    }
});

请参见

谢谢,这确实解决了我的问题。我还有一个问题。处理程序没有在UI中运行可运行线程吗?为什么mIntroLayer.setVisibility(View.INVISIBLE)没有被阻止?您的Runnable计划在3秒后运行。schedule()调用不会阻塞,而是立即执行后面的行。解决此问题的另一种方法是将3秒的可见性作为动画的一部分,然后设置动画侦听器,以确保它在最后保持不可见。这样,您就不需要明确地安排任何事情。