0

這裏的情況:的Android LinearLayout中的兒童定製渲染動畫

我有一個LinearLayout垂直ñCardView含有。

我想通過在卡片上添加動畫來自定義它的呈現方式。

當佈局呈現(也許在的onResume())我想每個卡從底部到卡應該在圖示中已經採取如果沒有動畫的,像上面的位置滑動:enter image description here 的黃色箭頭代表LinearLayout填充頂部和紫色箭頭代表CardViewmarginBottom

我不知道如何實現這一目標,因爲我無法得到最終的位置,這就是爲什麼我來這裏問你是否有人已經做了這個或類似的事情。

我試圖用LayoutTransitionObjectAnimator加入到添加/刪除時動畫兒童LinearLayout,但我必須通過視圖(孩子,我不是想知道在這個時候)在ObjectAnimator的構造..

我也試過這樣:

[...] 
int deviceHeight = getResources().getDisplayMetrics().heightPixels; 
[...] 
@override 
public onResume() { 
    super.onResume(); 
    card.animate().y(position) 
     .withStartAction(new Runnable(){ 
     @Override 
      public void run(){ 
      card.setY(deviceHeight); 
      } 
     }); 

,但我不能得到位置值(我總是得到0),或者如果我將其更改爲.Y(-deviceHeight)該卡已呈現在他位置,然後移動到下它的幻燈片來的LinearLayoutpaddingTop甚至不考慮前頂..

編輯: 綜上所述,我要讓類似發生了什麼事當機器人:animateLayoutChanges =「真」設置並刪除第一個孩子:其他的孩子剛剛向上滑動,以填補地方還空着(除了我想補充每個孩子動畫之間有一些延遲)

回答

1

最後我做了一個小技巧來實現這個:

假設LinearLayout被稱爲cardsContainer,我這樣做:

LayoutTransition lt = cardsContainer.getLayoutTransition(); 
lt.setStagger(LayoutTransition.CHANGE_DISAPPEARING, 200); 

這段代碼添加了200ms的每一個已刪除動作,因爲他們的孩子的每一個動畫,所以我有一個在上面空Viewghostcard)是match_parent那麼我這樣做:

@Override 
public void onWindowFocusChanged (boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if(hasFocus) { 
     cardsContainer.removeView(findViewById(R.id.ghostcard)); 
    } else { 
     cardsContainer.addView(ghostCard, 0); 
    } 
}