代码之家  ›  专栏  ›  技术社区  ›  artem

处理带有阴影偏移的拖放操作

  •  0
  • artem  · 技术社区  · 4 年前

    我想实现带有阴影偏移的拖放,但Android框架的接触点计算存在问题。

    我用拖动阴影生成器设置了一个垂直偏移:

            override fun onProvideShadowMetrics(outShadowSize: Point, outShadowTouchPoint: Point) {
                super.onProvideShadowMetrics(outShadowSize, outShadowTouchPoint)
    
                outShadowSize.set(dragParams.viewWidth, dragParams.viewHeight)
    
                outShadowTouchPoint.y = dragParams.viewVerticalOffset
            }
    

    它看起来像这样:

    enter image description here

    乍一看,它工作得很好,直到你接近顶部或底部边界。

    该框架根据手指位置而不是阴影位置计算进入/退出/移动事件。如果我们有偏移,我们可以这样计算阴影的中心Y: val centerY = (rawY - viewVerticalOffset + viewHeight / 2).toInt() ,但该框架显然仍将使用手指位置。

    所以,当我们用手指越过底部边界时,它会发送一个 ACTION_DRAG_EXITED 事件,无论阴影仍位于下降目标内:

    enter image description here

    如果我们没有用手指越过顶部边界,它仍然认为拖动仍在投放目标的范围内(但阴影完全超出了范围):

    enter image description here

    所以,如果我想用阴影的垂直偏移来实现拖放,我该怎么做?

    0 回复  |  直到 3 年前