- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个带有 ItemTouchHelper 的回收站 View 。它允许拖动项目。
我想将拖动限制在回收器 View 的范围内 - 也就是说,您不能只将 View 拖到容器外,这样它就会消失。
我试过像这样检查绝对坐标:
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
recyclerView.getLocationOnScreen(pos);
int rvY = pos[1];
viewHolder.itemView.getLocationOnScreen(pos);
int vhY = pos[1];
if (rvY > vhY || rvY + recyclerView.getHeight() < vhY + viewHolder.itemView.getHeight()) {
return;
}
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
...
}
但后来我遇到了渲染并发问题 - 如果我缓慢移动 View ,它会在超出范围时停止移动,但如果我移动得更快 - 那么它无论如何都会离开回收器 View 边界。
有什么想法/方法吗?
最佳答案
dY 和 dX 值必须被裁剪到 RecyclerView
的边界:
override fun onChildDraw(c: Canvas, recyclerView: RecyclerView, viewHolder: RecyclerView.ViewHolder, dX: Float, dY: Float, actionState: Int, isCurrentlyActive: Boolean) {
val clippedDx = clip(recyclerView.width, viewHolder.itemView.left, viewHolder.itemView.right, dX)
val clippedDy = clip(recyclerView.height, viewHolder.itemView.top, viewHolder.itemView.bottom, dY)
super.onChildDraw(c, recyclerView, viewHolder, clippedDx, clippedDy, actionState, isCurrentlyActive)
}
private fun clip(size: Int, start: Int, end: Int, delta: Float): Float {
val newStart = start + delta
val newEnd = end + delta
val oobStart = 0 - newStart
val oobEnd = newEnd - size
return when {
oobStart > 0 -> delta + oobStart
oobEnd > 0 -> delta - oobEnd
else -> delta
}
}
关于android - ItemTouchHelper : Prevent out of bounds dragging,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36223989/
我已经成功地实现了滑动行为并用它执行了一些操作。我现在遇到的问题是我想在滑动项目时限制滑动宽度。 目前是这样的 但我想将滑动行为宽度限制到这里 这是我到目前为止所做的:- private void s
我无法理解当我刷卡项目时调用 ItemTouchHelper 的哪个回调方法,但我没有完成刷卡而是将其转回正常状态。 我目前拥有的: @Override public void onSwi
我有这个 RecyclerView,它有一个 viewholder,它有一个 title/TextView 和一个 ViewPager。 RecyclerView 中的项目可以用 ItemTouchH
我正在使用 ItemTouchHelper 和 ItemTouchHelper.SimpleCallback 来允许用户重新排序垂直列表 Recycler View。 拖放有效,但在第一条跳线之后强制
我需要根据滑动方向更改行项目的背景颜色,如果向右滑动则将颜色更改为绿色,如果向左滑动则将颜色更改为红色。 但我发现很难获得滑动的方向。 这是我的代码。 public class SimpleItemT
我正在尝试将 RecyclerView 与 ItemTouchHelper 一起用于基本的“拖放”和“滑动关闭”实现。滑动工作正常,项目在适配器中正确删除,动画正确,但“拖放”行为非常奇怪。长按后 V
所以我在 recyclerview rv 上实现了这个 itemtouchhelper.simple 回调。 现在在这个 rv 中,我根据内容类型将 2 种布局设置为一行。 所以当我在 rv 上设置这
我有一个使用 recyclerview 来显示数据库项目的应用程序。我想通过使用 itemtouchhelper 拖动来重新排列项目。我想出了如何做到这一点,但我不知道如何更新我的房间数据库。 Ite
我正在尝试为列表中的每个项目实现一个具有不同 ItemTouchHelper 的 Recycleview。 我知道的唯一方法是将 ItemTouchHelper 直接添加到 RecycleView 而
使用 itemTouchHelper onMove 方法时。如何根据列表中的位置使用编号列表。 例如,项目1,项目2,项目3等都是基于项目在列表中的实际位置。如何通过向上或向下拖动来移动项目。更新列表
我正在使用 android studios ItemTouchHelper.SimpleCallback 来刷项目,我希望项目在长时间保持时被刷,有没有办法以编程方式刷项目?我怎样才能实现这个功能?
使用 ItemTouchHelper 从适配器中删除项目时遇到问题。当通过 updateItemRemoved() 滑动并删除第一个项目时,无法滑动任何其他项目。看起来在第一次移除任何项目后,“忽略”
当我们从末端滑动时,我可以显示红色背景和删除图标。我正在尝试实现部分滑动功能,在部分滑动时,滑动在删除图标之前停止。我尝试关注这些 solutions .但是,它对我不起作用。请指出我正确的方向。 p
我需要在开始时滑动一个项目,或者完全滑动,或者在当前点停止。就像在 Yandex 邮件中一样。我本来想做 setLeft(dx) 和 setRight(dx) 但这不是我需要的 我有课 ItemTou
我创建了一个类来处理滑动事件: public class CardViewSwipeListener : ItemTouchHelper.Callback { private Context c
我正在尝试在回收站 View 中实现滑动删除。我有这个代码。 public abstract class SwipeToDeleteCallback extends ItemTouchHelper.C
我已经实现了滑动以关闭到我的回收站 View 中。它触发 2 个功能(记录的编辑和删除)。如果向左滑动,则编辑它,如果向右滑动,则删除它。我在recyclerview项目的一般部分下有这样的布局
我使用带有 ItemTouchHelper 的 RecyclerView 进行滑动删除,并在滑动项下添加删除按钮,如下所示: 但是当我刷完后,该项目很快就会从列表中删除!如何锁定滑动的项目,并通过单击
当用户停止在我的 RecyclerView 上拖放时(当他放下所选项目时),我需要倾听用户的声音。 我可以通过我的 ItemTouchHelper 获得这些信息吗? 感谢帮助 马克:目前我只是在用户仍
我有一个滑动删除,它绘制背景(很像收件箱应用程序),由 ItemTouchHelper 实现 - 通过覆盖 onChilDraw 方法并在提供的 Canvas 上绘制一个矩形: ItemTou
我是一名优秀的程序员,十分优秀!