0

我的应用程序中有一个拖放功能,允许用户在屏幕上移动卡片图像。此功能在所有设备上都有效,直到在运行 Android 10 的 Pixel 设备上进行了测试。现在,被触摸对象的 DragShadow 有时会保留并从应用程序中泄漏出来。即使在关闭应用程序和卸载应用程序后,图像仍保留在屏幕上。只有完全重新启动设备才能清除图像。

我显然首先怀疑我的代码,但由于 imageViews 与应用程序环境断开连接,我现在怀疑 Android 10 的 RunTime 系统存在问题。

任何想法将不胜感激。如果需要,我可以发布代码,但这个类大约有 3000 行,所以我不会发布整个内容。

在此处输入图像描述

4

1 回答 1

0

它现在在谷歌被记录为一个错误并被分配,所以它正在被调查: 拖放错误报告

这是一种解决方法,可以稳定应用程序,以便人们可以使用它,如果他们对 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 开始拖动。

于 2019-09-20T23:50:28.387 回答