0

情况如下:

我有一个LinearLayout包含垂直 n CardView

我想通过在卡片上添加动画来自定义它的呈现方式。

当布局被渲染时(可能在onResume()中),我希望每张卡片从底部滑到卡片如果没有动画应该采取的位置,如上图所示:在此处输入图像描述 黄色箭头代表LinearLayoutpaddingTop和紫色箭头代表CardView' marginBottom

我不知道如何实现这一点,因为我无法获得最终位置,这就是为什么我来这里问你是否有人已经这样做或类似的。

我尝试在添加/删除时使用LayoutTransitionwith ObjectAnimatoradded 到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)卡在他的位置呈现,然后在滑到顶部之前移动到底部,LinearLayout paddingTop是甚至没有考虑..

编辑:总而言之,我想做一些类似于设置android:animateLayoutChanges="true"并且您删除第一个孩子时发生的事情:其他孩子只是向上滑动以填充该位置仍然是空的(除了我想要在每个子动画之间添加一些延迟)

4

1 回答 1

1

最后我做了一个小技巧来实现这一点:

假设LinearLayout被称为cardsContainer,我这样做了:

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

这段代码为每个因它们而移动的孩子的每个动画增加了 200 毫秒,所以我在match_parent的顶部有一个空的Viewghostcard )然后我这样做:

@Override
public void onWindowFocusChanged (boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if(hasFocus) {
        cardsContainer.removeView(findViewById(R.id.ghostcard));
    } else {
        cardsContainer.addView(ghostCard, 0);
    }
}
于 2015-10-10T16:41:46.360 回答