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)
以页面实际尺寸为准
所有传入 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 坐标单位
- 坐标轴方向/原点可能与屏幕坐标不同(不同设备/旋转方向可能不同),所以需要换算
- 不直接等同于 UI 像素:不能把 EMR 坐标当成 px 直接拿去布局
旧版本里 EMR 与像素坐标之间的换算,使用
PointUtils。
兼容旧版本的接口
以下接口只为sn-plugin-lib 0.1.65 及之前的插件保留,更高版本最好不要使用:
PointUtils的androidPoint2Emr/emrPoint2Android:用于 EMR 与像素坐标的换算getPageDisplaySize:获取当前页显示尺寸Element的maxX/maxY:EMR 刻度的最大值