2015-08-08 106 views
0

enter image description hereAndroid - 執行拖放時檢測被觸摸的元素

我在Xamarin中有一個拖放列表實現。問題是我想只能在觸摸拖放按鈕而不是整個元素時拖放元素。

我試圖檢測被按下的ImageView,但我無法得到正確的命中ImageView。

public bool OnDown (MotionEvent e) { 
      int x = (int) e.GetX(); 
      int y = (int) e.GetY(); 
      int itemnum = PointToPosition(x, y); 
      if (itemnum == AdapterView.InvalidPosition) { 
       return false; 
      } 

      if (m_dragging != null) { 
       m_dragging.Stop(); 
       m_dragging = null; 
      } 

      View item = GetChildAt(itemnum - FirstVisiblePosition); 
      item.Pressed = false; 

      var dragImage = item.FindViewById<ImageView> (Resource.Id.drag_image); 

      Rect bounds = new Rect(); 
      dragImage.GetDrawingRect (bounds); 
      if (!bounds.Contains (x, y)) { 
       return false; 
      } 

以下代碼僅適用於列表中的第一個元素,不適用於任何其他元素。我懷疑檢測到的命中是不正確的。

回答

0

以下解決。我意識到我其實不需要關心Y軸,只需要考慮X軸即可。

// Detect if the user is actually pressing the drag and drop image or not. 
      var dragImage = item.FindViewById<ImageView> (Resource.Id.drag_image); 
      if (dragImage != null) { 
       var dragImageHitRect = new Rect(); 
       dragImage.GetDrawingRect (dragImageHitRect); 
       // In this case we do not care about the Y axis. Just compare the x axis. 
       if (!dragImageHitRect.Contains (x, (int)dragImage.GetY())) { 
        return false; 
       } 
      }