RecyclerView 增加高度动画不起作用

RecyclerView Increase Height Animation Not working

我试图在单击按钮时增加 RecyclerView 高度,然后在使用动画单击按钮时减少高度。

它正在正常增加和减少,但动画不工作。

这是我的代码。

public void expand(View view) {

    Button button = (Button) view;
    if(button.getText().toString().equalsIgnoreCase("INCREASE")) {

        button.setText("DECREASE");
        final int height = (int) (recyclerView.getHeight() * 2.5);
        Animation a = new Animation() {

            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {

                FrameLayout.LayoutParams lp =
                        new FrameLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height);
                lp.gravity = Gravity.BOTTOM;
                recyclerView.setLayoutParams(lp);
            }
        };
        a.setDuration(2000); // in ms
        recyclerView.startAnimation(a);
    }
    else
    {

        button.setText("INCREASE");
        final int height = (int) (recyclerView.getHeight() / 2.5);
        Animation a = new Animation() {

            @Override
            protected void applyTransformation(float interpolatedTime, Transformation t) {

                FrameLayout.LayoutParams lp =
                        new FrameLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, height);
                lp.gravity = Gravity.BOTTOM;
                recyclerView.setLayoutParams(lp);
            }
        };
        a.setDuration(2000); // in ms
        recyclerView.startAnimation(a);
    }

}

我该怎么做?我不想拉伸它。我想通过一些动画效果来增加它的高度。

尝试使用值动画器。

ValueAnimator anim = ValueAnimator.ofInt(viewToIncreaseHeight.getMeasuredHeight(), -100);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        int val = (Integer) valueAnimator.getAnimatedValue();
        ViewGroup.LayoutParams layoutParams = viewToIncreaseHeight.getLayoutParams();
        layoutParams.height = val;
        viewToIncreaseHeight.setLayoutParams(layoutParams);
    }
});
anim.setDuration(DURATION);
anim.start(); 

我遇到了类似的问题,我通过在 xml 布局描述中的容器布局上添加属性 android:animateLayoutChanges="true" 解决了这个问题。 例如:

<LinearLayout 
 android:id="@+id/container"
 android:animateLayoutChanges="true">
      <RecyclerView 
       android:id="@+id/recyclerView"
           ...
      />
</LinearLayout>

希望对您有所帮助!