Skip to content

Most visited

Recently visited

navigation

创建交互式表盘

您的手表显示屏不只是一个漂亮的表盘:用户可以与它交互。例如,用户可以点按表盘了解正在播放哪首歌曲,或者查看当天的议程。只要没有另外一个界面元素也响应同一个单次点按手势,Android Wear 就允许 Android Wear 表盘在特定位置接受这个手势。

本课将向您展示如何通过首先构建表盘样式,然后实现手势处理来实现交互式表盘。

:在您的交互式表盘上开始开发工作之前,您应确保阅读交互式表盘的相关内容。

处理点按 Event

构建交互式表盘样式时,应用必须要做的第一件事是告知系统表盘可以接收点按 Event 。以下示例显示了如何执行此操作:

setWatchFaceStyle(new WatchFaceStyle.Builder(mService)
    .setAcceptsTapEvents(true)
    // other style customizations
    .build());

系统在表盘上检测到点按时,会触发 WatchFaceService.Engine.onTapCommand() 函数。在 WatchFaceService.Engine 实现中替换此函数来发起您想要执行的操作,如显示详细步数或更改表盘的主题背景。处理手势中的代码段展示了此实现的示例。

处理手势

为了提供一致的用户体验,系统会为系统界面元素保留一些手势,如拖动和长按。因此,系统不会向表盘发送原始触摸 Event。不过,系统会向 onTapCommand() 函数转发特定命令。

在用户最初触摸屏幕时,系统会发送第一条命令,即 TAP_TYPE_TOUCH。此 event 让您可以在用户触摸时向用户提供视觉反馈。在此 event 触发时,您的应用不应启动界面。启动界面会阻止拖动 Event 打开应用启动器、设置栏和通知卡片信息流。

在发送下一条命令之前,系统会判断接触是否为单次点按(只允许这一手势)。如果用户立即提起手指,系统会确定发生了单次点按,并转发 <a href="/reference/android/support/wearable/watchface/WatchFaceService.html#TAP_TYPE_TAP" TAP_TYPE_TAP event。如果用户没有立即提起手指,系统会转发 <a href="/reference/android/support/wearable/watchface/WatchFaceService.html#TAP_TYPE_TOUCH_CANCEL" TAP_TYPE_TOUCH_CANCEL event。在用户触发 <a href="/reference/android/support/wearable/watchface/WatchFaceService.html#TAP_TYPE_TOUCH_CANCEL" TAP_TYPE_TOUCH_CANCEL event 后,他们在重新接触屏幕之前无法再触发 <a href="/reference/android/support/wearable/watchface/WatchFaceService.html#TAP_TYPE_TAP" TAP_TYPE_TAP event。

以下示例向您显示了如何在表盘上实现点按 Event:

@Override
public void onTapCommand(
       @TapType int tapType, int x, int y, long eventTime) {
    switch (tapType) {
        case WatchFaceService.TAP_TYPE_TAP:
            hideTapHighlight();
            if (withinTapRegion(x, y)) {
                // Implement the tap action
                // (e.g. show detailed step count)
                onWatchFaceTap();
            }
            break;

        case WatchFaceService.TAP_TYPE_TOUCH:
            if (withinTapRegion(x, y)) {
                // Provide visual feedback of touch event
                startTapHighlight(x, y, eventTime);
            }
            break;

        case WatchFaceService.TAP_TYPE_TOUCH_CANCEL:
            hideTapHighlight();
            break;

        default:
            super.onTapCommand(tapType, x, y, eventTime);
            break;
    }
}

在此示例中,应用会确定发生了哪种 Event,并相应地作出响应。如果 Event 因用户手指首次接触而发生,应用会显示视觉反馈。如果 Event 因用户手指接触后的立即提起而发生,它会在用户点按的位置执行操作。如果 Event 因手指长时间接触而发生,则应用不会执行任何操作。

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)