Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在多点触摸屏上捕获双击触摸

在多点触摸屏上捕获双击触摸
EN

Stack Overflow用户
提问于 2012-01-25 10:21:57
回答 4查看 7.9K关注 0票数 5

我发布了另一个问题,关于如何通过监控TouchDown事件的两次触摸之间的时间间隔来“手动”捕获双击,但它存在相当多的but。有没有人知道微软在多点触摸屏上捕获双击的标准方法/事件?

非常感谢,

EN

回答 4

Stack Overflow用户

发布于 2012-10-16 10:41:35

我检查了敲击位置和秒表的组合,它工作得很完美!

代码语言:javascript
运行
AI代码解释
复制
private readonly Stopwatch _doubleTapStopwatch = new Stopwatch();
private Point _lastTapLocation;

public event EventHandler DoubleTouchDown;

protected virtual void OnDoubleTouchDown()
{
    if (DoubleTouchDown != null)
        DoubleTouchDown(this, EventArgs.Empty);
}

private bool IsDoubleTap(TouchEventArgs e)
{
    Point currentTapPosition = e.GetTouchPoint(this).Position;
    bool tapsAreCloseInDistance = currentTapPosition.GetDistanceTo(_lastTapLocation) < 40;
    _lastTapLocation = currentTapPosition;

    TimeSpan elapsed = _doubleTapStopwatch.Elapsed;
    _doubleTapStopwatch.Restart();
    bool tapsAreCloseInTime = (elapsed != TimeSpan.Zero && elapsed < TimeSpan.FromSeconds(0.7));

    return tapsAreCloseInDistance && tapsAreCloseInTime;
}

private void OnPreviewTouchDown(object sender, TouchEventArgs e)
{
    if (IsDoubleTap(e))
        OnDoubleTouchDown();
}

它在PreviewTouchDown中检查它是否是DoubleTap。

票数 11
EN

Stack Overflow用户

发布于 2015-04-13 09:11:14

Jowens answer对我帮助很大(如果我的声誉允许,我会给它加码;)但我必须调整它,所以它只需双击就能工作。原始代码确实认为任何超过2的轻敲都是双击。将_lastTapLocation更改为可空并在双击时将其重置会有所帮助。

代码语言:javascript
运行
AI代码解释
复制
private Point? _lastTapLocation;

private bool IsDoubleTap(TouchEventArgs e)
    {
        Point currentTapPosition = e.GetTouchPoint(this).Position;
        bool tapsAreCloseInDistance = false;
        if (_lastTapLocation != null)
        {
            tapsAreCloseInDistance = GetDistanceBetweenPoints(currentTapPosition, (Point)_lastTapLocation) < 70;
        }
        _lastTapLocation = currentTapPosition;

        TimeSpan elapsed = _doubleTapStopwatch.Elapsed;
        _doubleTapStopwatch.Restart();
        bool tapsAreCloseInTime = (elapsed != TimeSpan.Zero && elapsed < TimeSpan.FromSeconds(0.7));

        if (tapsAreCloseInTime && tapsAreCloseInDistance)
        {
            _lastTapLocation = null;
        }
        return tapsAreCloseInDistance && tapsAreCloseInTime;
    }
票数 3
EN

Stack Overflow用户

发布于 2016-06-09 11:54:02

我认为利用StylusSystemGesture事件更合适。这是我的代码。

代码语言:javascript
运行
AI代码解释
复制
    public static class ext
{
private static Point? _lastTapLocation;
        private static readonly Stopwatch _DoubleTapStopwatch = new Stopwatch();
        public static bool IsDoubleTap(this StylusSystemGestureEventArgs e, IInputElement iInputElement)
        {
            Point currentTapPosition = e.GetPosition(iInputElement);
            bool tapsAreCloseInDistance = false;
            if (_lastTapLocation != null)
            {
                tapsAreCloseInDistance = GetDistanceBetweenPoints(currentTapPosition, (Point)_lastTapLocation) < 70;
            }
            _lastTapLocation = currentTapPosition;

            TimeSpan elapsed = _DoubleTapStopwatch.Elapsed;
            _DoubleTapStopwatch.Restart();
            bool tapsAreCloseInTime = (elapsed != TimeSpan.Zero && elapsed < TimeSpan.FromSeconds(0.7));

            if (tapsAreCloseInTime && tapsAreCloseInDistance)
            {
                _lastTapLocation = null;
            }
            return tapsAreCloseInDistance && tapsAreCloseInTime;
        }
}

用法:

代码语言:javascript
运行
AI代码解释
复制
 private void UIElement_OnStylusSystemGesture(object sender, StylusSystemGestureEventArgs e)
    {
        if (e.SystemGesture == SystemGesture.Tap)
        {
            if (e.IsDoubleTap(sender as IInputElement))
            {
               // Do your stuff here
            }
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9001023

复制
相关文章
MySQL中DATETIME与TIMESTAMP
真理永远都不过时,今天由于工作的事情涉及到了这里,印象中只记得DATETIME类型占用8字节,TIMESTAMP类型占用4字节,心想这么久没有更新的知识万一过时了咋办,毕竟MySQL8都有了,于是翻开了MySQL的官网,决定查一查这两个字段的区别。
江湖安得便相忘
2019/08/21
2.6K0
MySQL中DATETIME与TIMESTAMP
真理永远都不过时,今天由于工作的事情涉及到了这里,印象中只记得DATETIME类型占用8字节,TIMESTAMP类型占用4字节,心想这么久没有更新的知识万一过时了咋办,毕竟MySQL8都有了,于是翻开了MySQL的官网,决定查一查这两个字段的区别。
暮雨
2019/10/11
2.2K0
【Mysql】MySQL中 TIMESTAMP类型 和 DATETIME类型 的区别
TIMESTAMP:把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。
瑞新
2020/12/07
5.1K0
MySQL 中 datetime 和 timestamp 的区别与选择
MySQL 中常用的两种时间储存类型分别是datetime和 timestamp。如何在它们之间选择是建表时必要的考虑。下面就谈谈他们的区别和怎么选择。
用户6182664
2019/11/20
20.7K0
Python中Datetime的使用
每次使用python处理datetime数据的时候,我总需要在书上查找或者网上搜索,使用后就很快忘记了,所以在这里整理出来一些常用方法。
AIFEx
2023/09/28
2610
Python中Datetime的使用
mysql中Timestamp,time,datetime 时间区别
时间范围:1970-01-01 00:00:00——2037年。 适用场景:TIMESTAMP列用于INSERT或UPDATE操作时记录日期和时间。 表现形式:TIMESTAMP值返回后显示为’YYYY-MM-DD HH:MM:SS’格式的字符串 扩展: 如果你不分配一个值,表中的第一个TIMESTAMP列自动设置为最近操作的日期和时间。 也可以通过分配一个NULL值,将TIMESTAMP列设置为当前的日期和时间。 显示宽度固定为19个字符。如果想要获得数字值,应在TIMESTAMP 列添加+0。
瑞新
2020/07/08
1.7K0
MySQL中timestamp和datetime,你用的对么?
在MySQL中,时间是咱们用到最多的类型,建表时,对于时间字段类型的选择,你是如何选择的呢?有人会说timestamp,也有人会说datetime,那么我们到底如何选择呢,它们又有什么区别?今天就和大家一起来看看。
xcbeyond
2020/03/25
3.4K0
MySQL中timestamp和datetime,你用的对么?
Python标准库datetime中4种基本对象的用法
1)创建日期时间、日期、时间、时间差对象: 2)生成时间序列: 3)日期时间对象与字符串之间的转换: 4)其他常见运算
Python小屋屋主
2020/11/11
5760
Python标准库datetime中4种基本对象的用法
Python中的Time和DateTime
Python在处理与时间相关的操作时有两个重要模块:time和datetime。在本文中,我们介绍这两个模块并为每个场景提供带有代码和输出的说明性示例。
deephub
2023/08/30
2010
Python中的Time和DateTime
Eclipse中java获得mysql的查询结果集
本文介绍了在Java中如何获取MySQL数据库的查询结果集,并对代码进行了详细的解释和注释。包括使用DriverManager类来加载数据库驱动、使用Connection对象创建与数据库的连接、使用Statement对象创建SQL语句、使用ResultSet对象获取查询结果集、使用next()方法遍历结果集、使用getXXX()方法获取结果集中的数据以及使用close()方法关闭数据库连接。
别先生
2017/12/29
5K0
Eclipse中java获得mysql的查询结果集
如何在Java中判断对象的真正“死亡”
在Java编程中,对象的生命周期管理是一项重要的任务。当对象不再被使用时,及时释放其占用的内存资源是一个有效的优化手段。而为了准确地判断对象是否真正“死亡”,我们需要理解Java的垃圾回收机制以及对象的引用关系。本文将详细介绍在Java中如何判断对象的真正“死亡”,并提供一些实例来帮助读者更好地理解。
疯狂的KK
2023/07/02
2510
如何在Java中判断对象的真正“死亡”
如何在js中创建对象
七夕临近了,没有对象的来创建一个吧 使用对象字面量: const o = { name: "zehan", greeting() { return `Hi, 我是${this.name}`; } }; o.greeting(); // "Hi, zehan" 使用构造函数: function Person(name) { this.name = name; } Person.prototype.greeting = function () { return `Hi, 我是
ZEHAN
2020/09/23
7.8K0
【MySQL基础】Mysql获得当前日期的所在月的第一天
尊重劳动成果,请访问CSDN著者原文链接 http://blog.csdn.net/zixiao217/article/details/51908506
青山师
2023/05/04
8250
MySQL 8.0中DATE,DATETIME和 TIMESTAMP类型和5.7之间的差异
MySQL中DATE,DATETIME和 TIMESTAMP类型都和时间有关。本文介绍MySQL 8.0和MySQL 5.7之间的差异;本文MySQL实验环境为8.0.23;
SEian.G
2021/04/29
7.5K0
如何在dos中操作xampp中的mysql数据库
方法1: 直接进入安装xampp中mysql中的bin文件夹进入mysql操作,具体如下: D:\software\xampp\mysql\bin>mysql mysql> show databases; 这样就可以直接进入进行操作了。 方法2: 上面的方法在每次从dos中进入mysql比较麻烦,所以我们就需要通过环境变量来设置,具体如下: 复制D:\software\xampp\mysql\bin,将其加入到环境变量的path中即可。
闵开慧
2018/03/30
5.2K0
Java DateTime 获得当前 Unix 的时间戳
获得当前日期时间的毫秒数,这个毫秒数是从 1970-01-01T00:00:00Z 开始计算的。
HoneyMoose
2020/10/30
2.1K0
Java DateTime 获得当前 Unix 的时间戳
如何在 JS 中“深冻结”对象?
1.如果咱们想要确保对象被深冻结,就必须创建一个递归函数来冻结对象类型的每个属性:
程序狗
2021/09/15
1.7K0
点击加载更多

相似问题

Java数据可视化

36

在java中可视化HashTable

25

eclipse中的java数据可视化软件

20

阶乘递归在java中“可视化”

12

在python中可视化数据

247
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档