2015-09-01 42 views
2

我在屏幕底部創建了2行信息欄。佈局捕捉到可見(僅限第一次)而不是幻燈片動畫

  • 首先只有頂行會被看到。
  • 按下'展開'按鈕,第二行將從下面的 向上滑動。現在兩行都可見。
  • 再次按下相同的按鈕,最下一行向下滑動,並且只有第一行顯示爲 。

這種情況是很常見的,並檢查不同的實現之後,我來到了這個簡單的一個幾乎完美的作品:

2個佈局在1>使底部GONE>的onClick - 使底部可見和適用於整個酒吧向上滑動>的onClick - 申請滑落酒吧,使底部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(可見)捕捉到只查看第一時間,或者爲什麼滑動效果沒有顯示的第一次。

我寧願不改變動畫的實現,因爲它給我所有的效果,但只有一次。 因此,任何有識之士都會非常感激。

回答

3

根據我的猜測,您的hiddenView的高度爲0。您應該在佈局中顯示隱藏視圖。 使用

android:visibility="visible" 

,而不是

android:visibility="gone" 

在hiddenView。

獲取的高度,並使其通過下面的代碼了:

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

    @Override 
    public void onGlobalLayout() { 

     height = hiddenView.getHeight(); 

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

使用此高度的動畫.. :)

+0

非常感謝!嘗試了很多東西之後,這最終奏效了:-D。 –