2019-7-15-win10-uwp-在笔迹开始书写拿到书写移动事件
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
win10 uwp 在笔迹开始书写拿到书写移动事件
|
lindexi
|
2019-7-15 8:58:5 +0800
|
2019-05-22 10:42:22 +0800
|
Win10 UWP
|
在使用 InkCanvas 的过程,无法直接通过 Pointer 消息拿到书写移动,需要使用 StrokeInput 才能获取到
在 InkCanvas.InkPresenter.StrokeInput 提供了 StrokeStarted 、StrokeContinued 、StrokeEnded 这些看名字就知道是干什么用的事件,通过这些事件可以在书写的过程拿到触摸事件或鼠标事件
使用 StrokeContinued 作为例子,先在 XAML 界面放一个 InkCanvas 控件,同时修改他的属性名是 InkCanvas 在后台代码可以这样写
InkCanvas.InkPresenter.StrokeInput.StrokeContinued += StrokeContinued;
拿到的StrokeContinued是PointerEventArgs可以拿到很多信息
public void StrokeContinued(InkStrokeInput sender, PointerEventArgs args)
{ }
在 Win10 的 Anniversary Update 1607 提供了 CoreWetStrokeUpdateSource 可以在湿笔迹的时候触发事件
在 CoreWetStrokeUpdateSource 同样提供了开始书写和书写过程中的事件
先通过 Create 方法创建 CoreWetStrokeUpdateSource 请看代码
var coreWetStrokeUpdateSource = CoreWetStrokeUpdateSource.Create(inkCanvas.InkPresenter);
这个事件有一点坑的是有加入的时机问题,请确保在所有的 InkCanvas 包括他的容器都 Loaded 完成之后才可以使用这个事件,不然是不会有触发的
通过 coreWetStrokeUpdateSource 可以拿到触摸按下和移动等事件
coreWetStrokeUpdateSource.WetStrokeStarting += CoreWetStrokeUpdateSource_WetStrokeStarting;
coreWetStrokeUpdateSource.WetStrokeContinuing += CoreWetStrokeUpdateSource_WetStrokeContinuing;
coreWetStrokeUpdateSource.WetStrokeStopping += CoreWetStrokeUpdateSource_WetStrokeStopping;
coreWetStrokeUpdateSource.WetStrokeCompleted += CoreWetStrokeUpdateSource_WetStrokeCompleted;
我在这些事件里面做输出,这样可以知道在多指触摸下的事件是如何触发的
private void CoreWetStrokeUpdateSource_WetStrokeCompleted(CoreWetStrokeUpdateSource sender,
CoreWetStrokeUpdateEventArgs args)
{
Debug.WriteLine($"CoreWetStrokeUpdateSource_WetStrokeCompleted{args.PointerId}");
} private void CoreWetStrokeUpdateSource_WetStrokeStopping(CoreWetStrokeUpdateSource sender,
CoreWetStrokeUpdateEventArgs args)
{
Debug.WriteLine($"WetStrokeStopping{args.PointerId}");
} private void CoreWetStrokeUpdateSource_WetStrokeContinuing(CoreWetStrokeUpdateSource sender,
CoreWetStrokeUpdateEventArgs args)
{
Debug.WriteLine($"CoreWetStrokeUpdateSource_WetStrokeContinuing {args.PointerId}");
} private void CoreWetStrokeUpdateSource_WetStrokeStarting(CoreWetStrokeUpdateSource sender,
CoreWetStrokeUpdateEventArgs args)
{
Debug.WriteLine($"CoreWetStrokeUpdateSource_WetStrokeStarting{args.PointerId}");
}
运行代码可以看到下面的输出
CoreWetStrokeUpdateSource_WetStrokeStarting 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
……
CoreWetStrokeUpdateSource_WetStrokeStarting 2
CoreWetStrokeUpdateSource_WetStrokeStarting 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
…… CoreWetStrokeUpdateSource_WetStrokeCompleted 1
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeCompleted2
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeContinuing 3
CoreWetStrokeUpdateSource_WetStrokeCompleted 3
可以从输出看到在多指触摸的时候,对每个手指都会触发一次完整的 Starting-Continuing-Completed 事件
那么 CoreWetStrokeUpdateSource 和 StrokeContinued 的区别在哪?就是在于触发的先后问题,在笔迹开始书写之前先触发 CoreWetStrokeUpdateSource 事件,然后在书写完成之后触发 StrokeContinued 事件,我同时输出 WetStrokeContinuing 和 StrokeContinued 事件,请看下面
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
StrokeContinued
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
StrokeContinued
StrokeContinued
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
StrokeContinued
StrokeContinued
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
StrokeContinued
StrokeContinued
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
CoreWetStrokeUpdateSource_WetStrokeContinuing 9
StrokeContinued
StrokeContinued
可以看到 WetStrokeContinuing 的输出时机和频率都会比 StrokeContinued 更高
另外推荐开放的是 StrokeContinued 的事件,因为在使用 UWP 笔迹就是为了做高性能的笔,在 WetStrokeContinuing 的事件里面如果添加了业务代码,那么将会影响笔迹的书写速度
在 UWP 的笔迹书写过程,需要等待 WetStrokeContinuing 事件完成之后才能进行笔迹渲染,而调用 StrokeContinued 事件是在笔迹书写完成之后调用同时不对这个事件做任何的等待
在框架里面建议开放的是 StrokeContinued 触发的事件,减少有逗比开发者在事件里面写了不清真代码降低了笔迹的性能
背水一战 Windows 10 (61) - 控件(媒体类): InkCanvas 涂鸦编辑 - webabcd - 博客园
InkStrokeInput Class (Windows.UI.Input.Inking) - Windows UWP applications
mtaulty/GraphPaperControl: Simple user control that uses Win2D to display a tiled grid design.
Creating a Custom Ruler with DirectInk - Windows Developer Blog
Windows-universal-samples/Samples/SimpleInk at master · microsoft/Windows-universal-samples
2019-7-15-win10-uwp-在笔迹开始书写拿到书写移动事件的更多相关文章
- win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑
本文来告诉大家如何通过 Win2d 完全控制笔迹绘制逻辑,本文适合用来实现复杂的自定义逻辑,可以完全控制笔迹的行为.包括在书写过程中切换模式,如进行手势擦除切换为橡皮擦模式 本文提供的方法适合用来做复 ...
- Win10 UWP开发实现Bing翻译
微软在WP上的发展从原来的Win7到Win8,Win8.1,到现在的Win10 UWP,什么是UWP,UWP即Windows 10 中的Universal Windows Platform简称.即Wi ...
- win10 uwp 列表模板选择器
本文主要讲ListView等列表可以根据内容不同,使用不同模板的列表模板选择器,DataTemplateSelector. 如果在 UWP 需要定义某些列的显示和其他列不同,或者某些行的显示和其他行不 ...
- win10 uwp 商业游戏
本文告诉大家去做一个商业游戏,游戏很简单,几乎没有什么技术 游戏的开始,需要添加框架库,于是引用我自己写的库. 首先是创建一个启动页面,这个页面是显示启动的. 在显示启动的时候,是需要加载游戏需要使用 ...
- win10 uwp 使用 msbuild 命令行编译 UWP 程序
原文:win10 uwp 使用 msbuild 命令行编译 UWP 程序 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http:// ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- Win10 UWP开发系列:实现Master/Detail布局
在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档: ...
- Win10/UWP开发—使用Cortana语音与App后台Service交互
上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...
- 【Win10 UWP】后台任务与动态磁贴
动态磁贴(Live Tile)是WP系统的大亮点之一,一直以来受到广大用户的喜爱.这一讲主要研究如何在UWP应用里通过后台任务添加和使用动态磁贴功能. 从WP7到Win8,再到Win10 UWP,磁贴 ...
随机推荐
- Mid-Atlantic 2008 Lawrence of Arabia /// 区间DP oj21080
题目大意: 输入n,m 输入n个数 将n个数切割m次分为m+1段,使得各段的Strategic Value总和最小 一组数a b c d的SV值为 a*b + a*c + a*d + b*c + b* ...
- 74CMS漏洞打包(从老博客转)
引子 这套CMS是上个月中做的审计,总共找到几个后台漏洞,可后台getshell,一个逻辑漏洞可任意发短信,还有一个前台注入漏洞.不过发到了某平台上之后,审核又要求我提交利用的poc,所以懒得发去了, ...
- python Mean Squared Error vs. Structural Similarity Measure两种算法的图片比较
# by movie on 2019/12/18 import matplotlib.pyplot as plt import numpy as np from skimage import meas ...
- LUOGU P3382 【模板】三分法 (三分)
传送门 解题思路 三分,填坑.每次取l与r的中间值mid,然后向左移一点点,向右移一点点进行判断,判断时用秦九韶算法即可. #include<iostream> #include<c ...
- 洛谷P3694 邦邦的大合唱
题目背景 BanG Dream!里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. 题目描述 N个偶像排成一列,他们来自M个不同的乐队.每个团队至少有一个偶像. 现在要求重新安排队列,使来自同一 ...
- 杂项-公司:Amazon
ylbtech-杂项-公司:Amazon 亚马逊公司(Amazon,简称亚马逊:NASDAQ:AMZN),是美国最大的一家网络电子商务公司,位于华盛顿州的西雅图.是网络上最早开始经营电子商务的公司之一 ...
- Android基础控件TextClock和Chronometer的使用
1.简介 DigitalClock, TextClock,AnalogClock,Chronometer其中DigitalClock和AnalogClock废弃了! TextClock是在Androi ...
- Docker系列(十六):搭建Openshift环境
目的: 搭建Linux下的Openshift环境. 参考资料: 开源容器云OpenShift 构建基于Kubernetes的企业应用云平台 ,陈耿 ,P253 ,2017.06 .pdf 下载地址:h ...
- JDK1.8 之Lambda表达式
概述 Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),简单地说,它是没有声明的方法,也即没有访问修饰符.返回值声明和名字. 你可以将其想做一种速记,在你需要 ...
- tiler--python实现的有趣的自定义马赛克图像拼接工具
最近在github中发现了一个有趣的小工具,tiler github链接https://github.com/nuno-faria/tiler 具体介绍请直接去github,这里只分享一下它的使用方法 ...