布局捕捉到可见(仅限第一次)而不是幻灯片动画

Layout snaps to visible (first time only) instead of slide animation

我正在屏幕底部创建一个 2 行信息栏。

这种情况很常见,在检查了不同的实现之后,我找到了这个几乎完美的简单方案:

1 中的 2 个布局 > 使底部消失 > onClick - 使底部可见并在整个栏上应用向上滑动 > onClick - 在栏上应用向下滑动并使底部消失

下面是onClick代码:

mInfoBar = (RelativeLayout) mRootView.findViewById(R.id.infoBar); 
mInfoBottomRow = (RelativeLayout) mRootView.findViewById(R.id.infoBottomRow);

mBtnExpand.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        if (mInfoBottomRow.getVisibility() == View.GONE) {
                            mInfoBottomRow.setVisibility(View.VISIBLE);

                            TranslateAnimation slideUp = new TranslateAnimation(0, 0, mInfoBottomRow.getHeight(), 0);
                            slideUp.setDuration(200);
                            mInfoBar.startAnimation(slideUp);
                        } else {

                            TranslateAnimation slideDown = new TranslateAnimation(0, 0, 0, mInfoBottomRow.getHeight());
                            slideDown.setDuration(200);

                            slideDown.setAnimationListener(new Animation.AnimationListener() {
                                @Override
                                public void onAnimationEnd(Animation animation) {
                                    mInfoBar.clearAnimation();
                                    mInfoBottomRow.setVisibility(View.GONE);
                                }

                                @Override
                                public void onAnimationRepeat(Animation animation) {
                                }

                                @Override
                                public void onAnimationStart(Animation animation) {
                                }
                            });

                            mInfoBar.startAnimation(slideDown);

                        }

                    }
                });

问题是,第一次按下按钮时,信息栏(顶行和底行)会卡到它的位置(没有滑动效果)。

所有其他后续按钮都可以正常工作...

第 2 次按下 - 栏向下滑动以显示位于屏幕底部的顶部栏和底部行消失。

第 3 次按下 - 条向上滑动以显示顶行和底行。

等等...

无法理解为什么setVisibility(VISIBLE) 只能第一次捕捉到视图,或者为什么第一次没有显示滑动效果。

我宁愿不更改动画实现,因为它只给了我想要的效果一次。 因此,非常感谢其中的任何见解。

我猜你的hiddenView的高度第一次是0。您应该在布局中使 hiddenView 可见。 使用

android:visibility="visible" 

而不是

android:visibility="gone"

在你的隐藏视图中。

通过以下代码获取高度并使其消失:

hiddenView.getViewTreeObserver().addOnGlobalLayoutListener(
   new ViewTreeObserver.OnGlobalLayoutListener(){

   @Override
   public void onGlobalLayout() {

       height = hiddenView.getHeight();

       hiddenView.getViewTreeObserver().removeGlobalOnLayoutListener( this );
       hiddenView.setVisibility( View.GONE );
  }
});

使用这个高度来制作动画..:)