两个回收者视图之间的更多按钮

时间:2018-04-17 09:39:59

标签: android android-recyclerview

我在一个屏幕上有两个回收者视图,在它们之间,有一个更多按钮。

enter image description here

我想用动画将上层的回收者视图的高度更新为 MATCH PARENT ,所以我试过了。

binding.moreLl.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ValueAnimator anim = ValueAnimator.ofInt();
            anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator valueAnimator) {
                    int val = (Integer) valueAnimator.getAnimatedValue();
                    ViewGroup.LayoutParams layoutParams = binding.fragmentWalletRv.getLayoutParams();
                    layoutParams.height = val;
                    binding.fragmentWalletRv.setLayoutParams(layoutParams);
                }
            });
            anim.setDuration(500);
            anim.start();
        }
    });

但遗憾的是我无法获得预期的结果。所以请指导我如何做那件事。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您只想在布局更改时获得动画,则无需使用自定义动画。 尝试通过启用

添加默认布局更改动画
  

机器人:animateLayoutChanges = “真”

到xml中的父布局。

点击更多按钮后,只需更改LayoutParams的{​​{1}}即可。

改变动画的速度

Recyclerview

答案 1 :(得分:0)

public class SlideAnimation extends Animation {

    int mFromHeight;
    int mToHeight;
    View mView;

    public SlideAnimation(View view, int fromHeight, int toHeight) {
        this.mView = view;
        this.mFromHeight = fromHeight;
        this.mToHeight = toHeight;
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation transformation) {
        int newHeight;

        if (mView.getHeight() != mToHeight) {
            newHeight = (int) (mFromHeight + ((mToHeight - mFromHeight) * interpolatedTime));
            mView.getLayoutParams().height = newHeight;
            mView.requestLayout();
        }
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
    }

    @Override
    public boolean willChangeBounds() {
        return true;
    }
}

使用上面的动画如下

rv1 = findViewById(R.id.rv1);
Animation animation = new SlideAnimation(rv1, rv1.getHeight(), 500);
                animation.setInterpolator(new AccelerateInterpolator());
                animation.setDuration(500);
                rv1.setAnimation(animation);
                rv1.startAnimation(animation);