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

时间:2015-09-01 16:04:56

标签: android-layout animation slide visible

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

  • 首先只有顶行可见。
  • 按“展开”按钮,第二行将向上滑动 下面。现在两行都可见。
  • 再次按下相同按钮,底行向下滑动,然后 只有第一行可见。

这种情况很常见,在检查了不同的实现后,我来到了这个简单的工作方式:

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

以下是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);

                        }

                    }
                });

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

所有其他后续按钮按下工作正常......

第二次按下 - 栏向下滑动,显示顶部栏位于屏幕底部,底行消失。

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

依旧......

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

我宁愿不改变动画实现,因为它只给我一次所需的效果。 因此,我们将非常感激其中的任何见解。

1 个答案:

答案 0 :(得分:3)

就我猜,你的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 );
  }
});

使用此高度动画..:)