我创建了一个RecyclerView
,我希望通过点击其中的CardView
来制作动画。我想应用这个材料设计动画,它调整所选项目的大小,然后向上推动项目,然后按下上面的项目:
我尝试使用此代码,但它只是折叠和展开而不推送下面的项目:
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;
}
答案 0 :(得分:0)
在我的几个项目中我遇到了完全相同的问题,我在stackoverflow找到了一个很好的解决方案,就像魅力一样!
https://stackoverflow.com/a/13381228/6569739
您可以在每个RecyclerView元素中创建一个不可见的RelativeLayout,它将保存您希望用户在expaned时看到的所有数据。 然后,只需在特定布局上调用expand(View v)即可展开它。
到目前为止,这是制作这种动画的最佳和最可靠的方法!