处理表盘中的触摸事件

d.a*_*mon 1 android watch-face-api wear-os

我有一个基于最新API(扩展CanvasWatchFaceService.Engine)的表盘.现在我想让触摸事件在表盘上有一些活动区域可以触摸打开设置等.CanvasWatchFaceService.Engine继承自WallpaperService.Engine,它声明了两个重要的方法:setTouchEventsEnabled(boolean)onTouchEvent(MotionEvent).

但即使我setTouchEventsEnabled(true)onCreate()方法中调用,Engine我也从未接到过onTouchEvent(MotionEvent)在我的引擎实现中的调用.

我做错了什么或者根本不可能?我知道一些提供活动区域的表盘,但我不确定它们是基于最新的API还是基于弃用的API构建(使用布局和GUI元素).

vge*_*rgo 6

在新的Android Wear 1.3中使用Interactive Watch Face API:

更新:

onCreateCanvasWatchFaceService.Engine基础类的函数中只向init函数添加一行:

setWatchFaceStyle(new WatchFaceStyle.Builder(mService)
    .setAcceptsTapEvents(true)
    // other style customizations
    .build());
Run Code Online (Sandbox Code Playgroud)

并管理下的点击事件

@Override
public void onTapCommand(int tapType, int x, int y, long eventTime) { }
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 你必须添加自己的代码才能找到被点击的触摸目标(如果有的话)(tapType==TAP_TYPE_TAP)
  • 你只能检测单个,短按,没有滑动或长按.
  • 通过检测TAP_TYPE_TOUCH,TAP_TYPE_TOUCH_CANCEL您可以猜测滑动手势,但TAP_TYPE_TOUCH_CANCEL不提供退出坐标.

欲了解更多控制你唯一的办法是增加一个SYSTEM_ALERT层和切换它基于关闭/开启您可以从收集信息onVisibilityChangedonAmbientModeChanged...