资讯专栏INFORMATION COLUMN

实现可拖拽的RecycleView

Shimmer / 1672人阅读

其实实现这种效果有两种方法:

View.startDrag(), 然后给需要监听拖拽的控件setOnDragListener.

ItemTouchHelper,这种实现方法更为简单,具体可参考链接描述

这里我是用的第一种方法,因为感觉第二种方法已经烂大街了。。况且第二种方法只能在RecycleView内部移动。跟其他控件结合的话就爆炸。

具体实现步骤

给RecycleView.ViewHolder实现OnClickListener()方法,长按的时候开始拖动。

拖动的时候给不同的DragEvent做不同的操作。分别有DragEvent.ACTION_DRAG_STARTED(拖动开始时)

DragEvent.ACTION_DRAG_ENTERED(拖动的View进入监听的View时),DragEvent.ACTION_DRAG_LOCATION(拖动的View在监听的View中改变位置时),DragEvent.ACTION_DRAG_EXITED(拖动的View离开在监听的View中时),DragEvent.ACTION_DROP(拖动放下时),DragEvent.ACTION_DRAG_ENDED(拖动结束时)

实现RecleView在拖动中排序

这几步中,最重要的还是第二步:

@Override
    public boolean onDrag(View v, DragEvent event) {
  
        switch (event.getAction()) {
            case DragEvent.ACTION_DRAG_STARTED:
                //开始时,让拖动的Item变白
                break;
            case DragEvent.ACTION_DRAG_ENTERED:
                //进入时,这个Demo不需要用到
                break;
            case DragEvent.ACTION_DRAG_LOCATION:
                //处理RecycleView的滑动
                //处理Item之间的交换
                break;
            case DragEvent.ACTION_DRAG_EXITED:
            case DragEvent.ACTION_DRAG_ENDED:
                //善后工作                 
                break;
        }
        //一定要return true
        return true;
    }

具体可参见源码:github

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12630.html

相关文章

  • 可拖拽的vue树形组件

    摘要:工作上需要一个可以操作数据的组件,查阅了网上有组件可以满足我的要求,但是毕竟项目是用写的,所以参考着用实现了这个组件功能。 工作上需要一个可以操作json数据的组件,查阅了网上有angular组件可以满足我的要求,但是毕竟项目是用vue写的,所以参考着用vue实现了这个组件功能。 期间发现angular和vue的侧重点有点区别,angular比较擅长直接操作dom,但是我用vue是直接...

    Scholer 评论0 收藏0
  • 一个vue的可拖拽的瀑布流布局组件

    摘要:是一个功能强大的瀑布流布局组件。支持用户拖拽和对改变元素大小,并提供相应的事件进行自定义操作。而且布局可以存储和再展现。 vue-grid-layout是一个功能强大的瀑布流布局组件。支持用户拖拽和对改变元素大小,并提供相应的事件进行自定义操作。而且布局可以存储和再展现。 showImg(https://segmentfault.com/img/bVTyGO?w=688&h=400);...

    lordharrd 评论0 收藏0
  • 可拖拽的3D盒子

    摘要:首先看下怎么做一个静止的盒子,用到了的。判断浏览器,谷歌滑轮事件当滑轮向上滚动时减小景深当滑轮向下滚动时增加景深滑轮事件好了,到这里这个盒子看起来已经很了,你可以直接在上复制代码查看效果,我多加了一个入场动画,喜欢可以顺手点个。   一直想做一个立体的盒子,前段时间刚好看见掘金上有位朋友发了篇关于3d盒子的文章,看了决定自己做一下,再写一些和盒子互动的操作。这里是要做的效果,应该要翻过...

    harryhappy 评论0 收藏0
  • ItemTouchHelper 实现拖拽和侧滑的 RecyclerView

    摘要:新建一个类继承,这里我们关注它其中的三个方法定义的可以拖拽和滑动的方向。侧滑或拖拽时被操作的轴高度增加,有明显的阴影。当滑动和拖拽结束时被调用首先新建一个接口用于回调,让的继承它。 前言 话不多说,直接上图:showImg(https://user-gold-cdn.xitu.io/2018/2/9/1617647158982e44?w=528&h=960&f=gif&s=193835...

    yuxue 评论0 收藏0
  • 分享一个功能强大的vue.js拖拽组件

    摘要:介绍这是一个功能强大的可拖拽的组件。它可以自动滚动,锁定坐标系。支持拖拽时,流畅的动画效果。可以支持水平,垂直或者网格的拖拽。 介绍 vue-slicksort -- 这是一个功能强大的可拖拽的vue.js组件。 它可以自动滚动,锁定坐标系。支持拖拽时,流畅的动画效果。可以支持水平,垂直或者网格的拖拽。支持触摸。 DEMO showImg(https://segmentfault.co...

    stefan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<