它现在在谷歌被记录为一个错误并被分配,所以它正在被调查:
拖放错误报告
这是一种解决方法,可以稳定应用程序,以便人们可以使用它,如果他们对 UI 更改感到满意,这甚至可能是一些开发人员完全可以接受的解决方案。
使用 OnLongClickListener 而不是 OnTouchListener 开始拖动。最初用户可以触摸和拖动,现在他们必须长按。如果需要,请保留 onTouch 以对 View 执行一些其他操作,但将 startDrag 内容移动到 onLongClickHandler。例如:
public boolean onLongClick(View v) {
//...
// get the card ready for dragging
DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
shadowBuilder.getView().setAlpha(1.0f);
// deprecated. use startDragAndDrop but need minimum SDK to be 24
// the original position is sent as LocalState (third argument)
if (v.startDrag(null, shadowBuilder, position, 0)) {
// make the moving view's old position appear invisible since
// its replaced by the drag shadow
v.setAlpha(0f);
}
return true;
}
当 startDrag 从 onLongClick 而不是 onTouch 启动时,问题完全消失了,没有其他更改。这不是修复,因为应该可以从 onTouchListener 开始拖动。