Android remove all recyclerview with animation on a button click

前端 未结 4 1837
無奈伤痛
無奈伤痛 2020-12-21 06:05

I have a recycler view. On a button click I want to remove all the items from the recyclerview but the items must be removed with animation. I am able to remove all the ite

4条回答
  •  天涯浪人
    2020-12-21 06:45

    Extend BaseItemAnimator class of recyclerview-animators library:

    MyAdapter adapter = new MyAdapter(null);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setAdapter(adapter);
    recyclerView.setItemAnimator(new MyScaleInLeftAnimator());
    
    findViewById(R.id.button).setOnClickListener(
        new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int count = adapter.getItemCount();
                adapter.clear();
                adapter.notifyItemRangeRemoved(0, count);
            }
        }
    );
    

    ...

    public class MyAdapter extends RecyclerView.Adapter mItems;
    
        ...
    
        public void clear() {
            if (mItems != null) {
                mItems.clear();
            }
        }
    
    }
    

    ...

    public class MyScaleInLeftAnimator extends BaseItemAnimator {
    
        private long lastRemoval;
        private int removeCount;
    
        public MyScaleInLeftAnimator() {
            lastRemoval = 0;
            removeCount = 0;
        }
    
        public MyScaleInLeftAnimator(Interpolator interpolator) {
            mInterpolator = interpolator;
            lastRemoval = 0;
            removeCount = 0;
        }
    
        @Override protected void preAnimateRemoveImpl(RecyclerView.ViewHolder holder) {
            ViewCompat.setPivotX(holder.itemView, 0);
        }
    
        @Override protected void animateRemoveImpl(final RecyclerView.ViewHolder holder) {
            long time = System.currentTimeMillis();
            long d = time - lastRemoval;
            if (d < 100) {
                removeCount++;
            } else {
                removeCount = 0;
            }
            lastRemoval = time;
            ViewCompat.animate(holder.itemView)
                    .scaleX(0)
                    .scaleY(0)
                    .setDuration(getRemoveDuration())
                    .setInterpolator(mInterpolator)
                    .setListener(new DefaultRemoveVpaListener(holder))
                    .setStartDelay(removeCount * 100)
                    .start();
        }
    
        @Override protected void preAnimateAddImpl(RecyclerView.ViewHolder holder) {
            ViewCompat.setPivotX(holder.itemView, 0);
            ViewCompat.setScaleX(holder.itemView, 0);
            ViewCompat.setScaleY(holder.itemView, 0);
        }
    
        @Override protected void animateAddImpl(final RecyclerView.ViewHolder holder) {
            ViewCompat.animate(holder.itemView)
                    .scaleX(1)
                    .scaleY(1)
                    .setDuration(getAddDuration())
                    .setInterpolator(mInterpolator)
                    .setListener(new DefaultAddVpaListener(holder))
                    .setStartDelay(getAddDelay(holder))
                    .start();
        }
    }
    

提交回复
热议问题