Android - 执行拖放时检测触摸的元素

时间:2015-08-08 07:37:38

标签: android xamarin drag-and-drop

enter image description here

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

以下代码仅适用于列表中的第一个元素,不适用于任何其他元素。我怀疑命中的检测是不正确的。

1 个答案:

答案 0 :(得分: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;
                }
            }