Android片段动画第一次卡
Android fragment animation first time stuck
我正在片段内制作动画。
我有 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
。
非常感谢您的帮助!
第一次可以将'yOffset'值添加到视图原始点
moreMenuFrameLayout.setY(currentYpostition + yOffset)
这会将视图置于屏幕底部。您可以在动画开始时启用可见性。
您可以使用onGlobalLayout
事件来设置视图的位置。
像这样:
moreMenuFrameLayout.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
moreMenuFrameLayout.setTranslationY(moreMenuFrameLayout.getMeasuredHeight());
moreMenuFrameLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
当您的视图在被绘制到屏幕之前获得其实际大小和位置时,就会发生此事件。但是,每次绘制视图时它们都会发生,因此您必须记住在第一次后立即删除侦听器。
HTH
我正在片段内制作动画。
我有 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
。
非常感谢您的帮助!
第一次可以将'yOffset'值添加到视图原始点
moreMenuFrameLayout.setY(currentYpostition + yOffset)
这会将视图置于屏幕底部。您可以在动画开始时启用可见性。
您可以使用onGlobalLayout
事件来设置视图的位置。
像这样:
moreMenuFrameLayout.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
moreMenuFrameLayout.setTranslationY(moreMenuFrameLayout.getMeasuredHeight());
moreMenuFrameLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
当您的视图在被绘制到屏幕之前获得其实际大小和位置时,就会发生此事件。但是,每次绘制视图时它们都会发生,因此您必须记住在第一次后立即删除侦听器。
HTH