【问题标题】:more button between two recycler view两个回收站视图之间的更多按钮
【发布时间】:2018-04-17 19:00:07
【问题描述】:

我在一个屏幕上有两个回收站视图,在它们之间,有一个像这样的 more 按钮。

我想用动画将上层回收站视图的高度更新为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();
        }
    });

但不幸的是,我无法得到预期的结果。所以请指导我如何做那件事。 提前致谢。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

    如果您只想在布局更改时有一个动画,则无需使用自定义动画。 尝试通过启用添加默认布局更改动画

    android:animateLayoutChanges="true"

    到xml中的父布局。

    单击更多按钮时,只需更改RecyclerviewLayoutParams

    改变动画的速度

    LinearLayout layout = mContentView.findViewById(R.id.parent_layout);
    LayoutTransition lt = layout.getLayoutTransition(); 
    lt.setDuration(2000); 
    

    【讨论】:

    • 高度在增加但很快,我要慢一点
    • LinearLayout 布局 = mContentView.findViewById(R.id.parent_layout); LayoutTransition lt = layout.getLayoutTransition(); lt.setDuration(500);试试这个来改变父布局的速度。
    • 将 setDuration 方法的值更改为 2000 lt.setDuration(2000);它以毫秒为单位。所以 2000 意味着 2 秒的动画。
    • 我将它设置为 5000 但它仍然没有减慢动画速度
    • 你在改变父布局动画吗?它是这两个 recyerlvews 的直接父级。将 animateLayoutChanges 放在直接父布局中,仅用于获取和设置持续时间。
    【解决方案2】:
    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多