【问题标题】:Double Tap Event on View视图上的双击事件
【发布时间】:2015-09-18 14:56:55
【问题描述】:

如何在 Xamarin.Android 中检测 View 的双击事件?我在TouchListener 上失败了。 有一个 SO answer 表示双击不是 Android 模式。

对于 Native Android (Java),有一个 answer,但我想在 Xamarin (C#) 中这样做。

【问题讨论】:

    标签: c# android xamarin xamarin.android


    【解决方案1】:

    在 C# 中完成这项任务太容易了。你是这个世界的新手,所以我给你确切的解决方案。

    首先,您不必为此创建新的自定义视图。

    创建一个类

    private class GestureListener : GestureDetector.SimpleOnGestureListener
        {
            public override bool OnDown(MotionEvent e)
            {
                return true;
            }
    
            public override bool OnDoubleTap(MotionEvent e)
            {
                return true;
            }
        }
    

    现在只需编写这段代码。

      GestureDetector _gestureDetector = new GestureDetector (_context, new GestureListener ());
    
                _gestureDetector.DoubleTap += (object sender, GestureDetector.DoubleTapEventArgs e) => {
                       //apply double tap code here
                };
    
                //apply touch to your view
                View1.Touch += (object sender, View.TouchEventArgs e) => {
                    _gestureDetector.OnTouchEvent (e.Event);
                };
    

    希望对你有所帮助。

    【讨论】:

    • 救了我的命!非常感谢
    【解决方案2】:

    您问题中的第一个链接已包含the answer。遗憾的是,它不是公认的答案。正确答案的 C# 端口是:

    public class DoubleTappableView : View
    {
        private readonly GestureDetector _gestureDetector;
    
        public DoubleTappableView(Context context, IAttributeSet attrs)
            : base(context, attrs)
        {
            _gestureDetector = new GestureDetector(context, new GestureListener());
        }
    
        public override bool OnTouchEvent(MotionEvent e)
        {
            return _gestureDetector.OnTouchEvent(e);
        }
    
        private class GestureListener : GestureDetector.SimpleOnGestureListener
        {
            public override bool OnDown(MotionEvent e)
            {
                return true;
            }
    
            public override bool OnDoubleTap(MotionEvent e)
            {
                //TODO: Add double tap logic here
                return true;
            }
        }
    }
    

    【讨论】:

    • 谢谢。我想在我的活动或片段中创建一个与 View.Clicked 相同的 DoubleClicked 事件。所以我可以在我的项目中使用它。请指导我。
    • 这实际上很简单,只需将一个事件添加到此视图并在 OnDoubleTap 方法中引发它。但是,没有必要这样做。上面的代码可以完美运行,不需要再添加一层
    • 你能告诉我我该怎么做吗?我也不想创建自定义视图。我只想使用 Android 视图
    • 实现和引发事件的复杂性几乎为零(并且有很多关于如何做到这一点的教程)。向这个类添加一个事件,创建它的 EventArgs 并在 OnDoubleTap 中引发它,提供您想要的任何数据。我再说一遍,在这里添加一个事件并没有太大帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多