控件叠放问题
protectedMan opened this issue · comments
hai commented
z少侠会轻功 commented
/**
* 是否可以交换位置
*/
fun swapPosition(fromPosition: Int, toPosition: Int): Boolean
尝试重写这个方法,当你拖动的item移动出你文件夹区域时才可以返回ture,否则返回false
hai commented
我试了下,把几个swapPosition属性都设为了false
如果我从recycler_view_folder的item拖动到recycler_view上方还会swap(也还是视频上的效果,问题依旧)
z少侠会轻功 commented
可以把你写的demo 发个 pull request给我吗,我也想看看
z少侠会轻功 commented
hai commented
PR不太会弄, 项目打包发你看看,其实就像实现的就是现在手机都有的那种桌面图标管理效果,支持拖到文件夹,或者从文件夹拖出
RecyclerViewDrag.zip
z少侠会轻功 commented
ok,晚些我试试,你可以先研究一下
z少侠会轻功 commented
/**
* 根据拖拽位置,显示、隐藏预览项
* @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 targetView = viewHolder?.itemView
val parentView = viewHolder?.itemView?.parent as? View
if (targetView != null && parentView != null) {
targetView.getGlobalVisibleRect(targetRect)
parentView.getGlobalVisibleRect(parentRect)
// 判断拖动的控件和父控件位置是否相交
if (Rect.intersects(parentRect, targetRect)) {
updatePreviewPosition(-1, viewHolder) //文件夹列表内
} else {
val y = top - location[1]
val position = findBestPosition(y.toInt(), recyclerView)
updatePreviewPosition(position, viewHolder)
}
} else {
updatePreviewPosition(-1, viewHolder) //文件夹列表内
}
} else {
replacePreview(viewHolder)
}
}
用这段逻辑,具体细节你慢慢调整
hai commented
还有个问题, recycler_view的拖拽开始和结束时间可以监听到, 我如何监听到 recycler_view_folder的拖拽和结束事件呢?
hai commented
还有个问题, recycler_view的拖拽开始和结束时间可以监听到, 我如何监听到 recycler_view_folder的拖拽和结束事件呢?
recycler_view_folder没有暴露相关事件
z少侠会轻功 commented
/**
* 根据拖拽位置,显示、隐藏预览项
* @param viewHolder 被拖拽的ViewHolder
* @param left viewHolder相对当前window的left
* @param top viewHolder相对当前window的top
* @param activity 是否被拖动,释放拖动时 activity == false
*/
上面那个方法中的 activity 参数就是标识当前拖动状态是否激活,你想要的这个事件官方源码已经提供了