2014-03-28 49 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()事件