繁体   English   中英

Xamarin 在自定义渲染器中添加单击事件

[英]Xamarin Add click event in custom renderer

我正在使用这个拖放代码: https : //github.com/CrossGeeks/DragViewSample/tree/master/DragViewSample/DragViewSample

这很好用,但现在我不仅希望能够拖放图像,还希望能够进行单击操作。 该功能可能需要在这部分代码的自定义渲染器中完成:

public override bool OnTouchEvent(MotionEvent e)
{
    float x = e.RawX;
    float y = e.RawY;
    var dragView = Element as DraggableView.DraggableView;
    switch (e.Action)
    {
        case MotionEventActions.Down:
            if (dragView.DragMode == DragMode.Touch)
            {
                if (!touchedDown)
                {
                    if (firstTime)
                    {
                        originalX = GetX();
                        originalY = GetY();
                        firstTime = false;
                    }
                    dragView.DragStarted();
                }

                touchedDown = true;
            }
            dX = x - this.GetX();
            dY = y - this.GetY();
            break;
        case MotionEventActions.Move:
            if (touchedDown)
            {
                if (dragView.DragDirection == DragDirectionType.All || dragView.DragDirection == DragDirectionType.Horizontal)
                {
                    SetX(x - dX);
                }

                if (dragView.DragDirection == DragDirectionType.All || dragView.DragDirection == DragDirectionType.Vertical)
                {
                    SetY(y - dY);
                }

            }
            break;
        case MotionEventActions.Up:
            touchedDown = false;
            dragView.DragEnded();
            break;
        case MotionEventActions.Cancel:
            touchedDown = false;
            break;
    }
    return base.OnTouchEvent(e);
}

但我不知道如何在不移动图像的情况下为其添加 Click 功能。 只是为了这个想法,当我点击图像时我想要一个弹出窗口,并且在我按住它时仍然能够拖放。 有人能帮我吗?

在这里需要做很多很好的事情才能使其以一种真正好的方式工作,如果您希望这样做,那么问题需要关闭,因为这不是其他人为您编写代码的站点。

假设你没问题,我会给你关于如何做的非常基本的想法。

关键在于记录touchedDown = true;DateTime touchedDown = true; 并将其与touchedDown = false;DateTime进行比较touchedDown = false; 如果它低于某个阈值,则称其为“点击”。 如果您这样做,将会有一些工件,但您需要解决它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM