实现RecyclerView的item拖拽、拖拽时的阴影效果、自定义分隔线

实现RecyclerView的item拖拽、拖拽时的阴影效果、自定义分隔线

个人学习笔记,仅供参考。

/**
 * 列表item的拖拽实现
 */
public class ItemDragActivity extends AppCompatActivity {
   
    private String TAG = "JPush";

    private TestAdapter mAdapter;

    private RecyclerView mRecyclerView;

    private ItemTouchHelper mItemTouchHelper;

    private List<String> mList = new ArrayList<>();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_item_drag);

        initView();

    }

    private void initView() {
   
        mRecyclerView = findViewById(R.id.recyclerView);
        mAdapter = new TestAdapter(this, initData());
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter);
        mRecyclerView.addItemDecoration(new DividerGridItemDecoration(this,
                dp2px(this, 45), dp2px(this, 20)));
        mItemTouchHelper = new ItemTouchHelper(new DragItemHelperCallBack());
        mItemTouchHelper.attachToRecyclerView(mRecyclerView);
    }

    private List<String> initData() 
        mList.add("小狗");
        mList.add("猫咪");
        mList.add("夜来香");
        mList.add("水杯");
        mList.add("傲娇");
        mList.add("电脑");
        mList.add("独家记忆");
        mList.add("香水有毒");
        mList.add("太多");
        mList.add("爱的可能");
        mList.add("说散就散");
        mList.add("方圆几里");
        return mList;
    }

    private class DragItemHelperCallBack extends ItemTouchHelper.Callback {
   

        @Override
        public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
   
            int dragFlags = 0;
            if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
   
                dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN |
                        ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
            } else {
   
                dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            }
            int swipeFlags = 0;
            return makeMovementFlags(dragFlags, swipeFlags);
        }

        @Override
        public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder,
                              @NonNull RecyclerView.ViewHolder target) {
   
            // 被按下拖拽的position
            int fromPosition = viewHolder.getAdapterPosition();

            // 当前拖拽到的item的position
            int toPosition = target.getAdapterPosition();
            if (fromPosition < toPosition) {
   
                for (int i = fromPosition; i < toPosition; i++) {
   
                    Collections.swap(mList, i, i+1);
                }
            } else {
   
                for (int i = fromPosition; i > toPosition; i--) {
   
                    Collections.swap(mList, i, i-1);
                }
            }
            RecyclerView.Adapter adapter = recyclerView.getAdapter();
            if (adapter != null) {
   
                // 必须从这里获取适配器,然后刷新
                adapter.notifyItemMoved(fromPosition, toPosition);
            }
            return true;
        }

        @Override
        public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
   

        }

        @Override
       
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值