android - Recyclerview 自动滚动问题:将带有图像的 recyclerview 拖放到列表外
问题描述
我创建了一个 Recyclerview 列表,其中嵌套了另一个水平 recyclerview 和拖放功能。我想在列表中拖动图像,所以我尝试了很多代码,但仍然无法平滑滚动并正确关注 Drop View。当我拖动图像拖动位置滚动到另一个位置。
我有图片和视频,请检查
请查看视频:
列表拖放视频
任何人有解决方案?
和代码如下:
mBinding.dragView.setOnTouchListener(this)
override fun onTouch(v: View?, event: MotionEvent?): Boolean {
val mShadow = CustomScaledDragShadowBuilder(v!!, 0.26f)
val item = ClipData.Item(v.tag.toString())
val mimeTypes = arrayOf(ClipDescription.MIMETYPE_TEXT_PLAIN)
val data = ClipData(v.tag.toString(), mimeTypes, item)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
v.startDragAndDrop(data, mShadow, null, 0)
} else {
v.startDrag(data, mShadow, null, 0)
}
return false
}
override fun onDrag(v: View?, event: DragEvent?): Boolean {
return when (event!!.action) {
DragEvent.ACTION_DRAG_STARTED -> {
hideVisibleRecipeImage(false)
true
}
DragEvent.ACTION_DRAG_ENTERED -> {
manageDragEnableViewBg(v, true)
true
}
DragEvent.ACTION_DRAG_LOCATION -> {
true
}
DragEvent.ACTION_DRAG_EXITED -> {
manageDragEnableViewBg(v, false)
true
}
DragEvent.ACTION_DROP -> {
manageDragEnableViewBg(v, false)
showDragImages(v!!)
true
}
DragEvent.ACTION_DRAG_ENDED -> {
hideVisibleRecipeImage(true)
true
}
else -> false
}
}
private fun hideVisibleRecipeImage(isEnd: Boolean) {
if (isEnd) {
mBinding.animImg1.visibility = View.VISIBLE
} else {
mBinding.animImg1.visibility = View.INVISIBLE
}
}
private fun manageDragEnableViewBg(view: View?, isEnable: Boolean) {
if (isEnable) {
val set = AnimatorSet()
val objX = ObjectAnimator.ofFloat(view, View.SCALE_X, 1f, 1.162f)
val objY = ObjectAnimator.ofFloat(view, View.SCALE_Y, 1f, 1.162f)
set.playTogether(objX, objY)
set.start()
} else {
val set = AnimatorSet()
val objX = ObjectAnimator.ofFloat(view, View.SCALE_X, 1.162f, 1f)
val objY = ObjectAnimator.ofFloat(view, View.SCALE_Y, 1.162f, 1f)
set.playTogether(objX, objY)
set.start()
}
view?.invalidate()
}
解决方案
推荐阅读
- css - Angular 5中单独模块的单独样式
- php - WORDPRESS:警告:在 td_block.php 中遇到的非数字值
- javascript - npm run build 不显示任何内容 - 反应 js
- javascript - JavaScript 循环从数组中随机选取
- jquery - jquery e.stopPropagation 防止将值返回给函数
- x86 - 超线程内核是否共享 MMU 和 TLB?
- python - 如何将向量中的数值和分类值组合为 LSTM 的输入?
- angular - Angular:Angular 中的 http.get() 方法不会为 API 的第二次相同请求调用提供更新的响应
- laravel - 我安装了 Facebook 标准事件像素“Lead”并返回为“SuccessCall”?
- haskell - 功能组合中的类型推导