RecyclerViewDrag icon indicating copy to clipboard operation
RecyclerViewDrag copied to clipboard

实现Grid效果

Open protectedMan opened this issue 2 years ago • 6 comments

我从文件夹中把8号数字拖出来,结果只能插入到最右边一列,无法插入左边两列,请问如何设置 见视频 https://user-images.githubusercontent.com/17565737/232937530-d664b500-c73f-4dee-8803-6e2f0f7cee5a.mp4

protectedMan avatar Apr 19 '23 00:04 protectedMan

    /**
     * 根据拖拽位置,显示、隐藏预览项
     * @param viewHolder 被拖拽的ViewHolder
     * @param left viewHolder相对当前window的left
     * @param top  viewHolder相对当前window的top
     * @param activity 是否被拖动,释放拖动时 activity == false
     */
    private fun notifyPreviewViewHolder(viewHolder: RecyclerView.ViewHolder?, left: Float, top: Float, activity: Boolean) {
        if (activity) {
            val targetLeft = recyclerView.left.toFloat()
            val targetRight = recyclerView.right.toFloat()
            val targetWith = recyclerView.width
            val xStart = targetLeft - targetWith / 4
            val xEnd = targetRight - targetWith / 4
            if (left in xStart..xEnd) {
                val y = top - location[1]
                val position = findBestPosition(y.toInt(), recyclerView)
                updatePreviewPosition(position, viewHolder)
            } else {
                updatePreviewPosition(-1, viewHolder)
            }
        } else {
            replacePreview(viewHolder)
        }
    }

demo中的代码有注释,你把updatePreviewPosition(position, viewHolder) 这个position计算对了就可以了

HeroZ-Dodge avatar Apr 19 '23 02:04 HeroZ-Dodge

https://user-images.githubusercontent.com/17565737/233043381-4593b775-f2ff-47ce-a1e4-b6b023fe1231.mp4

大佬我按照你提供的相关方法完善了相关逻辑, 还有但是gird最后一列好像有点问题,不知道怎么处理,相关代码已经PR 可以帮我定位下问题吗?

protectedMan avatar Apr 19 '23 10:04 protectedMan

已经很接近了,把position的细节处理好就可以

HeroZ-Dodge avatar Apr 20 '23 10:04 HeroZ-Dodge

看了下你的提交,提点建议,你把IDragData这个文件下放到了 core ,IDragData 这个文件定义属于业务层 如果你需要实现文件夹不允许拖动的效果,你可以直接重写 IDragItem.canDrag 的实现。 image 而不是依赖具体的实现FolderData

HeroZ-Dodge avatar Apr 24 '23 03:04 HeroZ-Dodge

看了下你的提交,提点建议,你把IDragData这个文件下放到了 core ,IDragData 这个文件定义属于业务层 如果你需要实现文件夹不允许拖动的效果,你可以直接重写 IDragItem.canDrag 的实现。 image 而不是依赖具体的实现FolderData

我直接重写 FolderData 的 isCanDrag=false image

用demo测试了下,文件下还可以拖动

protectedMan avatar Apr 24 '23 03:04 protectedMan

你要重写 FolderViewHolder ,IDragItem 和 IDragData 这两个接口你要区分下

HeroZ-Dodge avatar Apr 24 '23 03:04 HeroZ-Dodge