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); 
    } 
}