IllegalStateException:拖动阴影尺寸必须为正
IllegalStateException: drag shadow dimensions must be positive
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,可以暂时停止崩溃,但我不确定这是否是最佳解决方案。
无需创建透明视图。创建自定义 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()
。
如果您不想创建新的 class,您可以使用 anonymous classes:
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
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,可以暂时停止崩溃,但我不确定这是否是最佳解决方案。
无需创建透明视图。创建自定义 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()
。
如果您不想创建新的 class,您可以使用 anonymous classes:
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