3

https://developer.android.com/reference/android/view/View.DragShadowBuilder#public-constructors

当我使用上面概述的第二个构造函数时 - “View.DragShadowBuilder() 构造一个没有关联视图的阴影生成器对象。”

引发以下异常:java.lang.IllegalStateException:拖动阴影尺寸必须为正

这里的第二行代码对我来说是这样的:

public boolean onLongClick(View view) {
    view.startDragAndDrop(null, new View.DragShadowBuilder(), view, 0); 
    return true;
}

它仅发生在 Android 9 Pie 上。我已经在以前的 Android 版本上尝试过,没有问题。我在 Android 问题跟踪器上创建了一个问题,但也许这里有人知道它为什么会发生或如何解决它。

与此同时,我正在创建新的 View.DragShadowBuilderView(view),其中 view 是一个透明的 ImageView,它现在可以停止崩溃,但我不确定它是否是最好的解决方案。

4

2 回答 2

8

无需创建透明视图。创建自定义DragShadowBuilder

public class MyDragShadowBuilder extends View.DragShadowBuilder {

    @Override
    public void onProvideShadowMetrics(Point outShadowSize, Point outShadowTouchPoint) {
        outShadowSize.set(1,1);
        outShadowTouchPoint.set(0,0);
    }
}

并替换new View.DragShadowBuilder()new MyDragShadowBuilder().

于 2018-09-28T19:05:02.317 回答
0

如果您不想创建新类,可以使用匿名类

val shadowBuilder = object : View.DragShadowBuilder(view) {
        override fun onProvideShadowMetrics(outShadowSize: Point, outShadowTouchPoint: Point) {
            super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint)
            outShadowSize.set(width, height)
            outShadowTouchPoint.set(xPoint, yPoint)
        }
    }

您可以放置xPoint​​和yPoint使用接触点值:

    val xPoint = event.x
    val yPoint = event.y
于 2021-04-26T19:22:52.770 回答