【问题标题】:How to get the correct X,Y coordinates of a DragEvent.ACTION_DROP如何获得 DragEvent.ACTION_DROP 的正确 X、Y 坐标
【发布时间】:2014-03-28 13:48:00
【问题描述】:

我无法获取 DragEvent ACTION_DROP 的 X、Y 坐标。

我正在尝试对 gridview 单元格拖放进行动画处理,将单元格从释放点的 X、Y 动画到新的 X、Y。

下面是我用来尝试获取 X、Y 坐标的代码。但是它不会返回我期望的值。

 @Override
 public boolean onDrag(View v, DragEvent event) {
 
   switch (action) {
     case DragEvent.ACTION_DROP:
       float x = event.getX();
       float y = event.getY();
     break;
   }
}

将第一个 gridview 单元格拖动到右侧的相邻单元格会得到这些值。

掉落 X,Y:176.0,127.0

SourceView X,Y: 0.0,0.0

TargetView X,Y 360.0,0.0

  • Drop 值是从 DragEvent 返回的值。
  • SourceView 值来自开始拖动的单元格。
  • TargetView 值来自拖动事件结束的单元格。

谁能指出我如何获取 DragEvent 释放点的 X、Y 坐标的正确方向?或者解释一下 DragEvent 的 getX() 和 getY() 究竟返回了什么?

谢谢

【问题讨论】:

    标签: android drag-and-drop


    【解决方案1】:

    如文档中所述,

    event.getX(); event.get(y);
    

    返回拖动动作的位置在视图内

    getX() 和 getY() 方法提供拖拽点在 View 对象边界框内的 X 和 Y 位置。

    因此,为了获得放置位置的绝对坐标,您可以覆盖 GridView onTouchEvent 并获取 event.getRawX()、event.getRawY() 的值。

    如果 GridView 中的每个单元格都接受 dragEvent,您可以获取获取 onDrop 事件的 View,并执行类似的操作来检索坐标:

    @Override
    public boolean onDrag(View v, DragEvent event) {
        switch (event.getAction()) {
            case DragEvent.ACTION_DROP:
            int[] oldFolderCellPosition = new int[2];
            v.getLocationOnScreen(oldFolderCellPosition);
            return true;
    }
    

    【讨论】:

    • 感谢您的回复。你是对的,我的错误是假设 x,y 是相对于屏幕而不是视图本身。
    【解决方案2】:

    我遇到了这样的问题。有 3 件重要的事情 1-在父视图上设置拖动监听器(例如:线性布局或相对或..) 2- 使用 ACTION_DROP 获取坐标 x,y 而不是 ACTION_DRAG_ENDED 3- 在您想要将其拖到父级上的视图上设置 startDrag()。例如,您可以使用 setonlongclick() 并在 longclick 事件中设置 starDrag()

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多