Android 向下滑动视图在第一次后不再显示
我正试图在一个按钮点击时向下滑动视图,在同一个按钮点击时向上滑动 一切都是第一次工作,一旦滑下和滑上都完成了,就不会工作了Android 向下滑动视图在第一次后不再显示,android,android-animation,android-transitions,Android,Android Animation,Android Transitions,我正试图在一个按钮点击时向下滑动视图,在同一个按钮点击时向上滑动 一切都是第一次工作,一旦滑下和滑上都完成了,就不会工作了 if (slideView.getVisibility() != View.VISIBLE) { Transition transition = new Slide(Gravity.TOP); transition.setDuration(300); transiti
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);
}
});
}
它最初将从父视图向下滑动。。然后单击按钮,它将向上滑动。。单击“再次打开”按钮,什么也不会发生。。我想再往下滑一次我没有足够的声誉发表评论。 但是,如果您的视图已经可见,甚至已经消失,那么您的错误在于这两行:
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);
}
});
}
由于要根据视图的可见性设置视图的动画,即
(slideView.getVisibility()!=view.VISIBLE)
,因此在这段代码中设置视图的可见性不是一个好主意。您可能希望在不同的布尔值上设置动画(在我的例子中,如果播放音乐,则向上滑动,可见性可见,否则向下滑动,可见性消失)。如果有其他东西改变了视图的可见性,则以下代码将按原样工作。
在onClickListener中:
if (slideView.getVisibility() != View.VISIBLE) {
// if the view is not visible, slide it up
slideView.animate()
.translationY( -slideView.getHeight() )
.setInterpolator( new LinearInterpolator() )
.setDuration( 500 )
.start();
} else {
// if the view is visible, slide it back where it was
// 0 indicates the original position the view was in
slideView.animate()
.translationY( 0 )
.setInterpolator( new LinearInterpolator() )
.setDuration( 500 )
.start();
}
请记住,这一切都取决于视图本身的可见性以及您如何做到这一点!
您可能需要告诉我们,在您的代码中,谁更改了视图的可见性,以便为您提供更好的
if
语句。为什么不同时使用view.animate?@Prince Ali view animate不适用于slide down。您能解释一下“不工作”是什么意思吗?如果有效果,你会得到什么效果?@Prince Ali it会从父视图中以初始值向下滑动。。然后单击按钮,它将向上滑动。。单击“再次打开”按钮,什么也不会发生。。我想滑下去again@jin快乐的编码,请不要忽视,如果你有任何错误,请告诉我,如果你没有,并且它可以工作,那么请将它标记为一个答案,以便将来有相同问题的人可以使用它