我有一个问题,我一直无法解决,我非常满意。当用户在边界附近拖动对象时滚动列表
我有一种观点,我拖放到列表中。该列表是使用recyclerView创建的。拖动对象工作正常,recyclerView的项目都可以接收事件没有问题。现在我想让用户将他们的手指拖动到列表顶部或底部附近时进行滚动。我的第一步是将dragEvent侦听器添加到recyclerView,并在每次获得靠近顶部或底部边缘的位置时尝试开始滚动。所以,我的DragEvent.Location案例看起来像这样:
case DragEvent.ACTION_DRAG_LOCATION: {
removeDragScrollCallBack();
float y = event.getY();
final int scrollAreaHeight = v.getHeight()/4;
final int delayMills = 16;
int scrollAmount = 0;
if (y > v.getHeight() - scrollAreaHeight) {
scrollAmount = 10;
} else if (y < scrollAreaHeight) {
scrollAmount = -10;
}
if (Math.abs(scrollAmount) > 0) {
final int finalScrollAmount = scrollAmount;
dragScrollRunnable = new Runnable() {
@Override
public void run() {
if (canScrollVertically(finalScrollAmount)) {
scrollBy(0, finalScrollAmount);
if (dragScrollHandler != null && dragScrollRunnable != null) {
dragScrollHandler.postDelayed(this, delayMills);
}
}
}
};
dragScrollRunnable.run();
}
return true;
}
它有点作品。事情朝着正确的方向滚动。它似乎有些嘲笑,而且一般不会很顺利地滚动。此外,回收站视图仍在滚动时,拖放放置事件有时不会传递给子节点。
所以,我去使用列表视图 - link做类似的事情的谷歌的例子。我修改了他们用于列表视图的代码,并尝试以类似的方式处理我的recyclerView。这对我来说结果甚至更差。
我已经尝试过各种这些技术的其他改动,并换成使用smoothScroll函数而不是标准滚动函数,但我对任何结果都不满意。
有没有人有如何处理这个好的解决方案?
更新:我现在认为我的这个功能的许多问题是由于拖动监听器相当不可靠。在儿童接收事件时,有时回收商未能收到事件。