首页 > 解决方案 > 向下滑动视图在第一次后不再显示

问题描述

我正在尝试在单击按钮时向下滑动视图并在同一个按钮上单击向上滑动

一旦向下滑动并向上滑动完成后,一切都在第一次工作,它不会工作

     if (slideView.getVisibility() != View.VISIBLE) {

                Transition transition = new Slide(Gravity.TOP);
                transition.setDuration(300);
                transition.addTarget(slideView);
                TransitionManager.beginDelayedTransition(slideViewParent, transition);
                slideView.setVisibility(View.VISIBLE);
                transition.removeTarget(slideView);
            } else {
                slideView.animate()
                        .translationY(-slideView.getHeight())
                        .setDuration(400)
                        .setListener(new AnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(Animator animation) {
                                super.onAnimationEnd(animation);
                                animation.end();
                                slideView.setVisibility(View.GONE);
                            }
                        });
            }

它最初会从父视图向下滑动..然后单击按钮它将向上滑动..再次单击按钮没有任何反应..我想再次向下滑动它

标签: androidandroid-animationandroid-transitions

解决方案


我没有足够的声誉发表评论。但是,如果您的视图已经可见甚至已经消失,那么您的错误就在这两行:

slideView.setVisibility(View.VISIBLE);
slideView.setVisibility(View.GONE);

视图已经可见或已经消失,并且您将其设置为可见/再次消失,以无限循环向下/向上结束。

因此,将您的代码更改为:

if (slideView.getVisibility() != View.VISIBLE) {

                Transition transition = new Slide(Gravity.TOP);
                transition.setDuration(300);
                transition.addTarget(slideView);
                TransitionManager.beginDelayedTransition(slideViewParent, transition);
                slideView.setVisibility(View.GONE);
                transition.removeTarget(slideView);
            } else {
                slideView.animate()
                        .translationY(-slideView.getHeight())
                        .setDuration(400)
                        .setListener(new AnimatorListenerAdapter() {
                            @Override
                            public void onAnimationEnd(Animator animation) {
                                super.onAnimationEnd(animation);
                                animation.end();
                                slideView.setVisibility(View.VISIBLE);
                            }
                        });
            }

推荐阅读