2014-03-28 141 views
4

我无法获取DragEvent ACTION_DROP的X,Y坐标。如何获取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

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

任何人都可以指出我如何获得DragEvent的释放点的X,Y坐标的正确方向?或者解释DragEvent的getX()和getY()实际返回的内容?

由于

回答

3

如在文档文件中,

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

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

getX()和getY()方法提供视图对象边界框内拖动点的X和Y位置。

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

如果在GridView的每一个细胞都接受的dragEvent你可以采取让onDrop事件查看,并做类似的东西来获取坐标:

@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; 
} 
+0

感谢您的回复。你是对的,我的错误是假设x,y是相对于屏幕而不是查看自己。 –

0

我有一个问题是这样的。有3件重要的事情 1 - 在父视图上设置拖拽监听器(例如:线性布局或相对或..) 2使用ACTION_DROP获取cooridinate x,y而不是ACTION_DRAG_ENDED 3设置startDrag()你想要通过父母拖动它。例如你可以在longclick事件中使用setonlongclick()和设置starDrag()事件