提起移动应用,很多人的脑子还停在“一块玻璃屏加几个系统API”的时代。但Codename One的新版告诉你,现实世界已经塞进了折叠屏、触控笔、轨迹球、外接显示器,甚至车里那块小屏幕。一个代码库要通吃手机、平板、电脑、手表、电视、浏览器和折叠本,只处理触摸显然不够。这次他们把传感器、手势识别和指针细节直接写进核心库,不再需要靠插件和平台分支打补丁。
新上的com.codename1.sensors包一次性露了加速度计、陀螺仪和磁力计的底。更刁钻的是,当平台自己算不出重力、线性加速度和方向角时,核心层替它把活干了。用法简单到离谱,MotionSensorManager.getInstance()拿个总开关,再按类型取传感器,硬件不支持就返回null,一个能力检查就把所有平台分支吞掉了。也就是说,以后写运动类功能,一条代码路径跑所有设备,不用给iOS和安卓单独写适配。
![]()
手势引擎是这批更新里最实用的部分。摇一摇、屏幕朝下翻扣、面朝上翻起、左倾、右倾、前倾、后仰、拿起和自由落体,总共十种识别。不需要自己分析加速度波形,调一句addGestureListener,指定GestureEvent.TYPE_SHAKE,设备一震就弹对话框。因为识别逻辑直接坐在GestureEngine里,所有能出加速度数据的端口行为完全一致——也就是说你在安卓手表上摇一摇和大屏电视上摇一摇,触发的是同一套规则。唯一要额外注意的是iOS上得在plist里声明NSMotionUsageDescription,给用户一个开启运动权限的理由。
指针事件这次终于分清了手指、鼠标、笔和橡皮擦。PointerEvent不再只报x, y坐标,它带上了哪个按键触发、压感级别、笔的倾角,甚至光标悬停状态。你可以直接用pe.isSecondaryButton()判断是不是右键,然后弹上下文菜单;或者用pe.getPressure()拿压力值画粗细变化的笔迹,不用再外挂第三方库。更省事的是,通过CN.getCurrentPointerEvent()能随时轮询当前调度状态,触摸屏上这些值会自动落回安全默认值:主按键按下、压力1.0,不需要为没笔的设备写额外判断。
这些改动背后有一个很抠细节的设计:采样采用引用计数。有监听器的时候硬件才上电,最后一个监听器移除就自动休眠。不是常开监听耗电,也不逼开发者自己去管电池。配合Codename One一次编译到处跑的基因,你可以想象同一个应用在折叠屏上用触控笔画草图,接到带触控板的外接键盘自动切换右键菜单,塞进车里摇晃一下触发定制手势——代码路径不变,只是换了运行画布。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.