跳转到主要内容
Supernote 设备是墨水屏设备。使用高于 0.1.65 的 sn-plugin-lib 时,插件通过 SDK 读写的坐标只有一套:Android 像素坐标,并且以页面的实际尺寸为准。
sn-plugin-lib 0.1.65 及之前的版本返回 EMR(电磁感应数位板)坐标,更高版本只返回 Android 像素坐标。宿主按插件所使用的 sn-plugin-lib 版本决定返回哪一种,与设备系统版本无关。

Android 坐标系

定义
  • 坐标单位是 像素(px)
  • 一般约定:左上角为原点,x 向右增加,y 向下增加
  • width/height 就是页面的像素宽高(例如 A5X 常见 1404×1872,Manta 常见 1920×2560)
适用范围
  • 笔画采样点(Stroke 的 points)、五角星点
  • 套索矩形与套索元素点,见 套索
  • 几何图形、链接、标题、文本框等元素的位置与区域
这些坐标不需要再做 EMR 换算,可以直接用于 React Native 视图的绘制与定位,也可以在不同接口之间直接比较。

以页面实际尺寸为准

所有传入 SDK 的坐标,以及从 SDK 获取的坐标,都以页面的实际尺寸为准。该尺寸通过 PluginFileAPI.getPageSize 获取,返回 { width, height }。坐标应落在 0..width、0..height 的范围内,与屏幕上的展示尺寸无关。
操作当前页时同样以 getPageSize 为准。可以先用 getCurrentFilePath 和 getCurrentPageNum 得到当前文件路径和页码,再调用 getPageSize。

EMR 坐标系(旧版本)

EMR 坐标只在 sn-plugin-lib 0.1.65 及之前使用。EMR 坐标与 Android 坐标之间的换算比较繁琐,因此高于 0.1.65 的版本不再让插件读写 EMR 坐标,所有换算都由 SDK 接口在内部完成。插件传入和获取的都是 Android 像素坐标,不需要自己做换算。保留这一节,是为了让你在阅读旧插件和旧文档时知道 EMR 是什么。
EMR(Electro-Magnetic Resonance,电磁感应)坐标也叫数位板坐标,由 EMR 手写系统在硬件层定义,用来描述笔尖在感应平面上的绝对位置。 定义
  • 坐标单位不是像素,而是数位板采样的 硬件坐标单位(可以理解为“更细的网格刻度”)
  • 通常精度更高:同一屏幕像素可能对应多个 EMR 坐标单位
  • 坐标轴方向/原点可能与屏幕坐标不同(不同设备/旋转方向可能不同),所以需要换算
特点
  • 不直接等同于 UI 像素:不能把 EMR 坐标当成 px 直接拿去布局
与 Android 像素坐标的区别 旧版本里 EMR 与像素坐标之间的换算,使用 PointUtils。

兼容旧版本的接口

以下接口只为 sn-plugin-lib 0.1.65 及之前的插件保留,更高版本最好不要使用:
  • PointUtils 的 androidPoint2Emr / emrPoint2Android:用于 EMR 与像素坐标的换算
  • getPageDisplaySize:获取当前页显示尺寸
  • Element 的 maxX / maxY:EMR 刻度的最大值
把 sn-plugin-lib 升级到高于 0.1.65 后,必须去掉对 PointUtils 的换算。此时 SDK 返回和接收的已经是 Android 像素坐标,继续换算会得到错误的位置。