我想实现带有阴影偏移的拖放,但Android框架的接触点计算存在问题。
我用拖动阴影生成器设置了一个垂直偏移:
override fun onProvideShadowMetrics(outShadowSize: Point, outShadowTouchPoint: Point) {
super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint)
outShadowSize.set(dragParams.viewWidth, dragParams.viewHeight)
outShadowTouchPoint.y = dragParams.viewVerticalOffset
}
它看起来像这样:
乍一看,它工作得很好,直到你接近顶部或底部边界。
该框架根据手指位置而不是阴影位置计算进入/退出/移动事件。如果我们有偏移,我们可以这样计算阴影的中心Y:
val centerY = (rawY - viewVerticalOffset + viewHeight / 2).toInt()
,但该框架显然仍将使用手指位置。
所以,当我们用手指越过底部边界时,它会发送一个
ACTION_DRAG_EXITED
事件,无论阴影仍位于下降目标内:
如果我们没有用手指越过顶部边界,它仍然认为拖动仍在投放目标的范围内(但阴影完全超出了范围):
所以,如果我想用阴影的垂直偏移来实现拖放,我该怎么做?