如何获得 DragEvent.ACTION_DROP 的正确 X、Y 坐标

Jon*_*Fry 6 android drag-and-drop

我在获取 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

掉落 X,Y: 176.0,127.0

SourceView X,Y: 0.0,0.0

目标视图 X,Y 360.0,0.0

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

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

谢谢

ysh*_*hak 3

正如文档中记录的那样,

event.getX(); event.get(y);
Run Code Online (Sandbox Code Playgroud)

返回视图内拖动操作的位置。

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;
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的回复。你是对的,我的错误是假设 x,y 是相对于屏幕而不是视图本身。 (2认同)