我在片段中做动画。
我有2个视图在彼此之上,其中一个设置在View.GONE
上。
当我按下一个按钮时,我希望我的第二个片段从下到上翻译动画。
我做得很好而且工作得很好,
问题是,在我的第一次运行中,xml视图已经消失,但他与他想要的Y相同。
所以我做的第一个动画没有做任何事情,只需从GONE
切换到VISIBLE
,之后,我按下dismiss,片段消失,然后就像我想要的那样回来。
我的问题只是第一次运行。
如何将我的视图Y设置为低于屏幕100%?
这是我使用的代码:
private void moreCustomAnimation() {
int yOffset = moreMenuFrameLayout.getMeasuredHeight();
TranslateAnimation moveAnim = new TranslateAnimation(0, 0, yOffset, 0);
moveAnim.setDuration(500);
moveAnim.setFillAfter(true);
blackView.setVisibility(View.VISIBLE);
moreMenuFrameLayout.setVisibility(View.VISIBLE);
moreMenuFrameLayout.startAnimation(moveAnim);
moveAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
}
在离开屏幕的路上我使用相同的代码只需切换即可
yOffset为另一个Y整数,并在动画结束时将视图设置为GONE
。
非常感谢您提供任何帮助!
答案 0 :(得分:0)
首次可以将'yOffset'值添加到视图原点
moreMenuFrameLayout.setY(currentYpostition + yOffset)
这会将视图放在屏幕的底部。您可以在动画开始时启用可见性。
答案 1 :(得分:0)
您可以使用onGlobalLayout
事件来设置视图的位置。
像这样:
moreMenuFrameLayout.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
moreMenuFrameLayout.setTranslationY(moreMenuFrameLayout.getMeasuredHeight());
moreMenuFrameLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
当您的视图在绘制到屏幕之前获得其实际大小和位置时,会发生此事件。但是,每次绘制视图时都会发生这种情况,因此您必须记住在第一次之后立即删除侦听器。
HTH