推动并调整动画大小

时间:2018-02-20 17:12:27

标签: android material-design

我创建了一个RecyclerView,我希望通过点击其中的CardView来制作动画。我想应用这个材料设计动画,它调整所选项目的大小,然后向上推动项目,然后按下上面的项目:

Image

我尝试使用此代码,但它只是折叠和展开而不推送下面的项目:

     private void expandCardView()
 {
      mCardViewContent.setVisibility(View.VISIBLE);

      final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
      final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
      mCardViewContent.measure(widthSpec, heightSpec);

      ValueAnimator mAnimator = slideAnimator(0, mCardViewContent.getMeasuredHeight());
      mAnimator.start();
 }


 private void collapseCardView ()
 {
      int finalHeight = mCardViewContent.getHeight();

      ValueAnimator mAnimator = slideAnimator(finalHeight, 0);

      mAnimator.addListener(new AnimatorListenerAdapter()
      {
           @Override
           public void onAnimationEnd(Animator animator)
           {
                mCardViewContent.setVisibility(View.GONE);
           }
      });
      mAnimator.start();
 }


 private ValueAnimator slideAnimator(int start, int end)
 {

      ValueAnimator animator = ValueAnimator.ofInt(start, end);

      animator.addUpdateListener(valueAnimator->
      {
           int value = (Integer) valueAnimator.getAnimatedValue();
           ViewGroup.LayoutParams layoutParams = mCardViewContent.getLayoutParams();
           layoutParams.height = value;
           mCardViewContent.setLayoutParams(layoutParams);
      });
      return animator;
 }

1 个答案:

答案 0 :(得分:0)

在我的几个项目中我遇到了完全相同的问题,我在stackoverflow找到了一个很好的解决方案,就像魅力一样!

https://stackoverflow.com/a/13381228/6569739

您可以在每个RecyclerView元素中创建一个不可见的RelativeLayout,它将保存您希望用户在expaned时看到的所有数据。 然后,只需在特定布局上调用expand(View v)即可展开它。

到目前为止,这是制作这种动画的最佳和最可靠的方法!