Android片段动画第一次卡住了

时间:2015-01-19 09:57:51

标签: android android-layout android-fragments android-animation

我在片段中做动画。

我有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

非常感谢您提供任何帮助!

2 个答案:

答案 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