非法状态异常:拖动阴影尺寸必须为正数



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问题跟踪器上创建了一个问题,但也许这里有人知道为什么会发生这种情况或如何解决它。

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

无需创建透明视图。创建自定义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()

如果你不想创建一个新类,你可以使用匿名类:

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)
}
}

您可以将xPointyPoint作为使用接触点值:

val xPoint = event.x
val yPoint = event.y

最新更新