如何获取DragEvent.ACTION_DROP的正确X,Y坐标

时间:2014-03-28 13:48:00

标签: android drag-and-drop

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

我正在尝试拖动网格视图单元格的动画,将单元格从释放点的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单元格拖动到右边的相邻单元格会给出这些值。

  

Drop 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()实际返回的内容是什么?

由于

2 个答案:

答案 0 :(得分:3)

如文档中所述,

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;
}

答案 1 :(得分:0)

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

中设置starDrag()