安卓,setVisibility/动画问题

5

我有一个LinearLayout,当我按下一个按钮时它会消失,再次按下该按钮后它会重新出现。但是这个过程非常快,看起来不太自然。 我是通过以下方式实现的:

disappearView.setVisibility(View.GONE);

我想添加一些动画效果... 如果我只将可见性设置为不可见,那么布局原来所在的空间仍然存在。所以我尝试了这个方法:

if (disappearView.getVisibility() == View.VISIBLE){
            Animation out = AnimationUtils.makeOutAnimation(this, true);
            disappearView.startAnimation(out);
            disappearView.setVisibility(View.INVISIBLE);
            disappearView.setVisibility(View.GONE);

        }
        else {
            Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);
            disappearView.startAnimation(in);
            disappearView.setVisibility(View.VISIBLE);      
        }

这个动画速度太快了,而且会消失。你完全看不到它。我需要使用一个线程在设置了invisible后启动gone吗?还是需要等待一段时间?或者有更好的方法来完成所有这些操作?

2个回答

15

我不确定你想要实现什么... 你是想让LinearLayout在一段时间内淡出而不是立即消失吗?然后一旦它淡出,通过View.GONE从父级中删除?

如果是这样,你可以使用AlphaAnimation来实现淡出,然后像EvZ发布的一样附加一个监听器:

AlphaAnimation fadeOutAnimation = new AlphaAnimation(1, 0); // start alpha, end alpha
fadeOutAnimation.setDuration(1000); // time for animation in milliseconds
fadeOutAnimation.setFillAfter(true); // make the transformation persist
fadeOutAnimation.setAnimationListener(new AnimationListener() {         
    @Override
    public void onAnimationEnd(Animation animation) {
        linearLayout.setVisibility(View.GONE);
    }

    @Override
    public void onAnimationRepeat(Animation animation) { }

    @Override
    public void onAnimationStart(Animation animation) { }
});

linearLayout.setAnimation(fadeOutAnimation);

是的,那就是我想要的。目前我没有使用alpha淡出,而是使用内置的AnimationUtils.makeOutAnimation...它只是让布局缓慢地从屏幕的一侧滑出。然后以不同的方式带回来,更像是alpha的变化。谢谢你提供的监听器 :) 我已经看到了具有监听器的alpha动画,但我想知道我正在使用的动画是否会产生类似的效果。 - Paul
我需要在此之前调用 setVisibility(View.Visible 或 View.Gone) 以使其正常工作。谢谢。 - Prashant
@Ben 我也在做同样的事情,但是第一个视图会先变得可见,然后动画会有一点延迟,因此动画看起来不太流畅。我不想让视图的可见性和动画的开始之间有延迟。我该怎么做才能实现这个? - Dhruvam Gupta
@DhruvamGupta,我认为如果您提出一个新问题并提交一个gif来展示您所看到的行为,这将会有所帮助。您是想在开始时消除“非常小的延迟”,还是需要在动画之前改变视图的初始可见性? - Ben Jakuben

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接