一、Android 可穿戴设备简介:概念、类型和材质设计

欢迎阅读 Pro Android 可穿戴设备书籍!这本书将向你展示如何为那些在你普通的智能手机和平板电脑之外的 Android 设备开发 Android Studio 应用。这本书还包括可以戴在你身上的设备的 Android 开发,这就是为什么这些 Android 设备通常被称为“可穿戴设备”。

如果你正在寻找为 Android 设备开发,如 iTV 集、4K iTV、游戏机、机器人或其他设备,那么你想要的书是 Pro Android IoT (Apress,2016)书。该标题涵盖了被称为“物联网”的 Android 设备的开发,包括不戴在身上的设备,以及更普通的平板电脑和手机之外的设备。

本章将介绍不同类型的可穿戴设备,以及它们的功能和流行用法,您将了解可穿戴设备的术语、概念、差异化因素和重要技术,并仔细了解您可以为可穿戴设备开发哪些类型的 Android 应用。我将在这里介绍所有与可穿戴设备相关的知识,以便您可以在第 2 章中专注于设置您的工作站,然后在第 3 章的中了解 Android 可穿戴设备的功能。我还会解释一下可穿戴设备和 Android 可穿戴外设的区别。

我还将讨论 Android 5 中添加的新材质设计功能,因为这些功能可用于可穿戴设备的应用开发,你将看到你可以用这些功能做的所有很酷的事情!

可穿戴技术定义:什么是可穿戴?

术语可穿戴设备,以及术语可穿戴技术可穿戴设备,表示基于嵌入式计算机硬件的消费电子技术,该硬件内置于穿戴在人体外部的产品中。这包括衣物和配饰,包括珠宝(如手表)和防护服(如眼镜),以及袜子、鞋子、帽子和手套等衣物,以及可以舒适佩戴在身体某处的运动、健康和健身产品。

可穿戴设备通常具有少量的通信能力,这将允许设备穿戴者实时访问信息。数据输入功能是可穿戴设备的必要功能,因为它允许用户访问可穿戴设备的功能,并使用它来运行您将在本书的过程中学习开发的应用。数据输入通常采用触摸屏界面、语音识别(也称为语音输入)的形式,或者有时通过使用可穿戴设备本身内置的硬件按钮。

由于有了云,本地存储对于可穿戴设备来说是不必要的,尽管一些设备具有 micro SD(安全数字)卡或在链接的配套设备上存储数据。可穿戴设备能够执行许多与手机和平板电脑相同的应用任务;事实上,许多可穿戴设备要求可穿戴设备在蓝牙 4.x 技术的操作范围内与另一个 Android 设备“结合”(本章稍后将对此进行详细介绍)。

与当今市场上的手持技术相比,Android 可穿戴设备在“传感器输入”方面往往更加复杂。这是因为可穿戴设备将提供智能手机或平板设备通常没有的传感和扫描功能。这方面的例子包括生物反馈和生理功能跟踪等功能,如脉搏、心率、锻炼强度、睡眠监测等。

可穿戴硬件设备的示例包括智能手表、智能眼镜、纺织品(也称为智能织物)、帽子、便帽、鞋子、袜子、隐形眼镜、耳环、头带、助听器和珠宝,例如戒指、手镯和项链。可穿戴技术往往指的是可以毫不费力地穿上和脱下的东西。值得注意的是,可穿戴设备概念的版本在本质上更加激进,例如植入设备,如微芯片甚至智能纹身。在本书中,我不会讨论这些非主流设备类型的应用开发。因为普通大众将主要使用智能手表,所以我将把重点放在这类可穿戴设备上。最终,无论设备是佩戴在身体上还是整合到身体中,这些 Android 可穿戴设备的目的都是提供对消费电子产品的持续、方便、便携、无缝和免提访问。

可穿戴应用开发:什么类型的应用?

可穿戴技术的用途仅限于你的想象力,这些应用的影响将是深远的,这就是为什么你首先购买了这本 Pro Android 可穿戴设备的原因!

可穿戴应用将在许多方面影响广泛的行业垂直领域。许多行业都在采用 Android 可穿戴设备,其中包括医疗保健、制药、教育、健身、娱乐、音乐、老龄化、残疾、交通、金融、企业、保险、汽车和游戏行业,并且该列表每天都在增长。

这些行业中的可穿戴应用的目标应该是将功能强大的便携式电子设备和计算机无缝融入个人的日常生活。在出现在消费市场之前,可穿戴设备主要用于军事行动以及制药、医疗保健、体育和医药行业。

十多年前,医学工程师们开始讨论一种可穿戴设备,这种设备可以以智能衬衫或智能腕带的形式监控患者的健康。其中至少有一项是当今的主流技术,其目的是监测生命体征,并将生物反馈信息发送到应用或网站进行数据跟踪和分析。

你可以在可穿戴设备上创建的 Android 应用的类型仅限于你的想象。这是因为可穿戴设备与更先进的硬件“配对”,因此具有智能手机或平板电脑所具有的相同硬件功能,以及智能手机和平板电脑所不具备的一些传感器!

一个合乎逻辑的应用垂直领域是健康和福利监控;由于这些心率传感器,可以创建 Android 可穿戴设备应用来帮助用户生活中与健康相关的领域,例如他们在健身房的锻炼,在工作或旅行时跟踪他们的饮食,获得足够的睡眠,每天步行或跑步足够的英里数,以及帮助用户改善健康或至少保持健康的类似应用。

另一个合乎逻辑的垂直应用是社交媒体,因为目前的趋势是在一天的任何时候都与每个人保持联系,同时也结交新朋友或商业伙伴。机器人通过 Wi-Fi 或 4G 随时连接到互联网,因此这些类型的穿戴应用在可穿戴设备上也会非常受欢迎。

当然,游戏、手表人脸或皮肤、娱乐消费也将是可穿戴设备的海量应用垂直领域。让我们来看看这方面,这样你就可以知道如何应用你将学到的东西了!

Android 可穿戴乐趣:增强现实、教育娱乐和游戏化

虽然可穿戴技术可能会对社交媒体连接、健康、节食或健身领域产生重大影响,但可穿戴技术领域也有望对休闲游戏、音频视频(AV)娱乐、教育娱乐和增强现实(AR) 市场产生重大影响。将日常任务变成游戏乐趣的可穿戴应用,通常被称为游戏化 ,也是一个重大的市场机会。

AR 最初被称为混合现实,可以利用可穿戴技术。AR 使用 Android 平台中的 i3D OpenGL 功能,创建一个逼真的沉浸式 3D 环境,与你周围的现实世界实时同步,这要归功于你的 Android 5 应用中的 Java 7 代码。Android 4.4 和更早的版本使用 Java 6,而 Android 5 使用 Java 7。使用数字视频、数字图像或基于全球定位卫星(GPS)定位的技术,将虚拟现实或交互式 3D (i3D)与实际现实相结合,无论如何都不是什么新鲜事。AR 应用是可穿戴应用的最高级类型。

在世纪之交之前,人们就已经开始考虑通过使用可穿戴设备来交付 AR。重要的是,AR 硬件原型正在从笨重的技术(如 Oculus Rift 使用的巨大护目镜)转变为小巧、轻便、舒适、高度移动的 3D 虚拟现实系统。

下一个即将出现在可穿戴设备上的最复杂的应用将是可穿戴游戏。你可以期待很快在市场上看到为智能手表和智能眼镜开发的休闲游戏。仔细的优化是创建一个在可穿戴设备上运行良好的游戏应用的关键,我将在本书中讨论这个主题。

可穿戴设备的另一种复杂类型的娱乐应用是 AV 应用。在可穿戴设备上播放数字音频或数字视频也需要仔细的优化,以及拥有一副好的蓝牙高保真耳机的用户,幸运的是,这些耳机目前由十几家主要的电子产品制造商制造。

最后,更复杂的可穿戴应用之一是定制智能手表的面部或皮肤。这些可以把用户整天看着的表盘变成他们想要的样子。当然,你也可以创建大量基于文本的应用,比如办公工具或方便的秘籍管理器;这些在可穿戴设备上会很好用!

Android 可穿戴应用的未来需要反映时尚、功能、实用性、视觉和用户界面(UI)设计的无缝集成。我将在整本书中讨论如何做到这一点,在你把第 2 章第 T1 节的开发工作站放在一起,并在第 5 章第 T3 节的 T2 中创建了模拟器之后,这样你就有了可穿戴开发的基础。

主流可穿戴设备:智能手表和智能眼镜

流行的消费电子产品制造商争相生产两种主要(即主流)类型的可穿戴设备。

智能手表是目前最受欢迎的可穿戴设备,市场上已经有数百种价格适中的型号。几个世纪过去了,手表已经成为国际时尚宣言。因此,这是最受欢迎和最有用的 Android 可穿戴设备也就不足为奇了。

另一种流行的可穿戴类型是智能眼镜,谷歌(Google)和 Vuzix (M100)等公司已经发布了数十种产品。让我们更仔细地看看这两种类型的可穿戴设备硬件,因为它们将成为运行您将在本书过程中创建的 pro Android 可穿戴设备应用的大多数设备类型。

智能手表:圆形表盘与方形有机发光二极管

消费电子产品中的智能手表可穿戴类型拥有最多的产品,有几十个品牌制造商和数百个实际产品型号,除了一个(Apple Watch)之外,所有产品都运行一种或另一种版本的 Android。为此,我将在本书中重点讨论这些。

还有三星的智能手表 Galaxy Gear 2,它使用 Tizen OS,利用 Linux,HTML5,JavaScript 和 CSS3 进行应用开发。我不会在本书中涉及这些,而是专注于三星 Gear S。

Android 5 Wear 软件开发套件(SDK)支持两种不同的智能手表表面类型,圆形和方形,因为手表通常有这两种配置。在第 5 章中,您将为这两种智能手表类型创建 Android 虚拟设备(avd)(软件仿真器)。

智能眼镜:眼镜和其他智能眼镜制造商

智能眼镜可穿戴消费电子产品类别是下一个增长最快的可穿戴产品类别。品牌眼镜制造商正在争先恐后地进入这个可穿戴领域,所以请尽快关注 Luxottica 的智能眼镜。因此,这将是本书的第二个重点。

智能眼镜一般会运行谷歌眼镜开发套件(GDK)或 Android 4.x,2015 年你可以期待 Android 5 智能眼镜可穿戴设备。有很多智能眼镜公司,包括谷歌、Vuzix、GlassUp、索尼、six15 和 Ion。谷歌当然已经停止生产这款眼镜,并承诺未来会推出更好的新产品。

可穿戴应用编程接口

有两个主要的应用编程接口(API),它们都运行在谷歌 Android Studio 下,可用于访问可穿戴设备的功能,这些功能在 Android 5 版本中尚未成为标准,该版本横跨智能手机和平板电脑等主流设备。智能手表 API 叫做 Wear SDK ,智能眼镜 API 叫做眼镜 GDKT5。需要注意的是,一些可穿戴设备可以运行完整的 Android 操作系统(OS)。

智能手表的例子是 Neptune Pine 智能手表,它运行完整的 Android 操作系统,谷歌眼镜产品不要求你使用谷歌眼镜 GDK,除非你需要使用谷歌眼镜的特殊功能或想要开发“原生”眼镜应用。换句话说,谷歌眼镜将运行在普通智能手机和平板电脑上运行的 Android 应用。

这意味着 Neptune Pine 和谷歌眼镜可以运行您为其他 Android 设备开发的相同应用。Neptune Pine 产品线的新版本将利用 Wear SDK,这在很大程度上是我将在本书范围内讨论的内容。

Android Studio 1.0:Android Wear SDK

Android Wear SDK 是谷歌创建的用于 Android 可穿戴设备(运行在 Android 上的可穿戴设备)的 API。

它于 2015 年初通过 Android 开发者网站推出,同时推出了几个定制的“垂直”API,包括 Android Auto SDK(用于汽车)、Android TV SDK(用于 2K 或 4K iTV 电视机)和 Android Wear SDK(用于智能手表)。目前,Wear SDK 的目标是智能手表,但后来它可能会扩展到其他可穿戴设备,如鞋子、帽子等。

Android Wear SDK 提供了一个统一的 Android 可穿戴设备开发平台,可以跨多个智能手表产品。在 Wear SDK 推出之前,智能手表制造商必须要么提供自己的 API,就像索尼智能手表 One 和 Two 在 2014 年所做的那样,要么支持完整的 Android 4 操作系统,就像 Neptune Pine 在 2014 年所做的那样。

这里需要注意的是,这个 Android Wear SDK 并没有提供单独的操作系统,实际上是 Android 5 OS 的一个扩展,需要 Android 可穿戴应用的一部分在你的主机 Android 设备上运行。这通常是 Android 智能手机,因为这是最便携的设备,也是连接各种网络和运营商的设备类型。

由于 Android 智能手表代表了可穿戴应用市场的大部分,我将把本书的大部分内容集中在可穿戴应用开发领域,尽管我也会在第 17 章中介绍谷歌眼镜。

谷歌眼镜开发套件:安卓或镜像的 GDK

在开发谷歌眼镜可穿戴应用时,你有两种不同的 GDK API 选项。您可以单独使用它们,也可以将它们相互结合使用。此外,还有第三种选择,即不使用任何一种 API 而直接使用 Android 操作系统。让我们仔细看看玻璃的发展。

谷歌眼镜的安卓工作室 GDK:眼镜开发套件

谷歌 Android GDK 是 Android OS APIs(也称为 Android 5 SDK)的一个插件,它允许你构建谷歌所说的玻璃器皿。玻璃器皿包括直接在谷歌眼镜硬件上运行的谷歌眼镜可穿戴应用。

一般来说,如果您需要直接访问谷歌眼镜的独特硬件功能,为您的用户与谷歌眼镜硬件进行实时交互,或者在没有互联网、Wi-Fi、2G、3G 或 4G 蜂窝网络可用的情况下为您的应用提供离线功能,您会希望使用这种 Android GDK 开发方法。

通过将 Android SDK 与 GDK 结合使用,您可以利用广泛的 Android APIs,同时为谷歌眼镜用户设计出色的用户体验。与 Mirror API 不同,使用这个 Android GDK 构建的玻璃器皿可以在 Glass 本身上运行。这允许访问 Glass hardware 的低级、专有(谷歌眼镜独有)产品功能。

仅使用 Android 环境开发谷歌眼镜应用

谷歌设计了 Glass 平台,以使他们现有的 Android SDK 能够在 Glass 上工作。这意味着您可以使用所有现有的 Android 开发工具,您将在第 2 章中下载并安装这些工具,并且您的玻璃器皿可以使用标准的 Android 应用包(APK)格式交付。

这打开了许多其他 pro Android 开发书籍,如Pro Android Graphics(Apress 2013)或 Pro Android UI (Apress 2014),它们将向您展示如何制作在谷歌眼镜设备上运行良好的可视化 Android 应用。这是因为谷歌眼镜产品旨在运行完整的 Android 操作系统,因此,任何应用都将在其上运行。这意味着你可以开发一个可以在所有安卓设备上运行的应用,包括谷歌眼镜。只要用户不需要在智能手表上运行,除了 Pine 之外,这就允许一次编码,随处交付(高度优化)应用的开发工作流程!

在谷歌眼镜上使用 RESTful 服务:镜像 API

还有一个 API 可以与谷歌眼镜配合使用,完全不依赖于谷歌 Android 操作系统。这就是所谓的 Google Glass Mirror API,也就是通常所说的 RESTful API 。

Mirror API 允许开发者使用他们选择的任何编程语言为谷歌眼镜制作玻璃器皿。RESTful 服务提供了对基于 web 的 API 的简单访问,这些 API 将为应用开发人员完成大部分数据传输的繁重工作。

一般来说,如果您需要使用跨平台的基础设施,如 HTML 或 PHP,需要访问 Google Glass 产品的内置功能,或者需要独立于 Android 操作系统的平台,您会希望使用这个镜像 API。举例来说,这就是你在 iOS 或 Windows 上使用谷歌眼镜的方式。

混合玻璃应用:混合安卓 GDK 和镜像 API

最后,有趣的是,开发者也可以创建“混合”谷歌眼镜应用。这是因为,正如你可能已经怀疑的那样,谷歌眼镜镜像 API 可以与谷歌眼镜安卓 GDK 接口。

这是通过使用菜单项调用镜像 API 代码来完成的,该代码将一个意图对象发送到安卓 GDK API,然后发送到 GDK 应用代码。在本书中,我将使用 Intents,它是一种 Android 平台特定的 Java 对象类型。意图用于在应用、菜单、设备、活动和 API(如 Mirror API)之间进行通信。你甚至可以使用这种混合开发模式来利用现有的 web 属性,这些属性可以启动直接在谷歌眼镜上运行的增强的 i3D 体验。

真正的 Android 或 Android 外设:蓝牙链接

在专业 Android 可穿戴设备的世界中,甚至在某些情况下,在专业 Android 设备的世界中,作为一名开发人员,你需要知道一个区别,Android 产品的营销人员往往会想要隐藏这个区别。这是因为制造一种类型的 Android 设备的成本将非常高(小型化),而制造另一种类型的 Android 设备的成本将非常低,因此利润率将更高,特别是如果公众可以确信产品正在运行 Android 操作系统,而实际上它并没有这样做!

这在 Android 可穿戴产品领域非常明显,包括智能手表和智能眼镜,如谷歌眼镜。一些智能手表是真正的安卓设备;也就是说,它们在智能手表内部有一个计算机处理单元(CPU)、内存、存储、操作系统、Wi-Fi 等。Neptune Pine 就是一个很好的例子。

真正的智能手表设备实际上就像是在你的手腕上戴着一部完整的智能手机,将由电信运营商提供,就像现在的智能手机一样。这款真正的 Android 智能手表将是你唯一的 Android 设备,你将不再需要携带智能手机。嵌入式计算机小型化的进步最终将允许所有智能手表做 2014 年 Neptune Pine 所做的事情,将成熟的 Android 设备放在某人的手腕上。

如果你想知道,我从 TrueHD (HDTV)行业术语中借用了这个“真实”的 Android 描述。TrueHD 是 1920×1080 的分辨率,它是一个必要的描述性修饰符,因为市场上还有另一种更低的 1280×720 分辨率,称为 just HD(我称之为伪 HD)。

其他智能手表不是真正的 Android 设备,可以被描述为现有智能手机、平板电脑或平板电脑的“外设”,这些智能手表使用蓝牙技术成为 Android 设备的扩展,Android 设备具有 CPU(处理器)、内存(应用运行时)、数据存储和电信(Wi-Fi 接入和 4G LTE 蜂窝网络)硬件。

外围 Android 设备显然需要不同的应用开发工作流程,并具有不同的数据优化和测试程序,以实现最佳的性能和用户体验。

显然,因为这本书将着眼于开发一些更受欢迎的 Android 可穿戴设备,所以我将更详细地讨论这个“远程 Android 外设”开发问题,并看看如何设计和优化可穿戴外设应用。

我只是想让你知道,现在有两种完全不同的方法来进行 Android 开发:板载或原生 Android 应用,以及远程或双向(后端)通信 Android 应用功能。

随着蓝牙可穿戴设备和第二屏幕技术的出现(在Pro Android IoT【Apress,2016】一书中有所涉及),随着时间的推移,这将成为 Android 应用开发的一个重要区别,这些扩展 Android 产品将继续出现在市场上。

最重要的是,您需要知道哪种消费电子设备正在托管 CPU、内存、存储和电信硬件,哪种消费电子设备正在托管触摸屏、显示器和输入,以及哪种技术(以及它的速度)正在将这两者连接在一起。这对你优化应用性能的能力很重要,因为用户体验(UX)是基于应用的响应速度和易用性。

可穿戴应用设计:Android 5 材质设计

Android 5 于 2014 年与 Android TV、Wear 和 Auto SDK 插件一起发布,采用了全新的 UI 范式。谷歌称之为材质设计,因为它更懂 3D。纹理或“蒙皮”一个 2D 或 3D 对象涉及到使用媒体设计行业中通常称为的材质

谷歌创建了 Material Design 作为跨谷歌 Chrome OS 和 Android OS 平台,以及跨运行 Chrome OS(Linux 之上的 HTML5、CSS3 和 JavaScript)或 Android 5 OS(64 位 Linux 内核之上的 Java 7、CSS3 和 XML)的消费电子设备的最终用户交互、动画动作和视觉设计的深远 UI 设计指南。

Android 5 操作系统中的一个很酷的功能是支持所有类型的 Android 5 设备上的应用的材质设计,如果你读过《绝对初学者的 Android 应用》一书(2014 年 4 月),你可能已经知道了。

在本章以及本书的其余部分,你将了解到如何为 Android 可穿戴设备应用使用材质设计。Android 5,也称为 Android API Level 21(以及更高版本),提供了一些新的组件和新的 OS 功能,专门针对材质设计。

这包括新的 Android 5 主题、用于新查看功能的 Android View 小部件、改进的阴影和动画 API 以及改进的可绘制性,包括更好的矢量缩放、使用 8 位 alpha 的 32 位 PNG 着色以及自动颜色提取 API。我将在本章的剩余部分更详细地讨论所有这些。

安卓材质设计主题:光明与黑暗

这个 Android 5 材质设计主题提供了新的 Android 5 符合风格,用于您的 Android 5 应用。由于 Android Wear SDK 是 Android Studio 1(Android 5 plus IntelliJ)的一部分,这些新主题也将适用于 pro Android 可穿戴设备。你将在第二章第一节安装 Android Studio 以及其他一些开源内容开发软件,在第三章第三节探索 Android Studio 1.x 和 IntelliJ,在第四章第五节探索 Java 7。如果你是为 Android 4 开发,你会使用 HOLO 主题如果是为 Android 5 开发,会使用材质主题。

两个主题。赫萝和主题。材质提供深色和浅色版本。您可以使用自己定义的自定义调色板自定义材质主题的外观,以匹配品牌标识。通过使用材质主题属性,你可以给 Android 操作栏和状态栏着色。

你的 Android 5 小工具有一个新的用户界面设计和触摸反馈动画。您可以自定义这些触摸反馈动画,以及应用的活动过渡。Android 中的活动是应用的一个逻辑部分或 UI 屏幕。我假设你已经了解 Android 的行话,因为这是一本中级到高级水平(专业)的书。

定义耐磨材质主题:使用样式属性

就像以前版本的 Android 一样,材质主题是使用 Android Style 属性定义的。各种材质主题的示例将使用 XML 定义,使用以下 XML 1.0 标记:

@android:style/Theme.Material                     (the default dark UI version)
@android:style/Theme.Material.Light               (the light UI version)
@android:style/Theme.Material.Light.DarkActionBar (a light version with a dark version Actionbar)

正如我提到的主题。材质 UI 风格(或主题)只有 Android 5,API 级及以上才有。v7 支持库为一些 5 之前版本的视图小部件提供了带有材质设计风格的主题,并支持在 Android 5 之前定制调色板。

定义耐磨材质主题调色板:项目标签

如果你想定制你的材质设计主题的原色,以适应你的可穿戴应用品牌,你可以使用 <项目> 标签来定义你的定制颜色,嵌套在 <样式> 标签内,嵌套在 <资源> 标签内,嵌套在 themes.xml 文件内。您创建了一个 AppTheme ,其父属性继承自主题。材质父主题,并使用 colors.xml 文件添加您的自定义颜色引用,该文件使用 xml 标记结构保存十六进制颜色数据。这应该是这样的:

<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <item name="android:colorPrimary">@color/primary</item>
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <item name="android:colorAccent">@color/accent</item>
    </style>
</resources>

同样,我假设您了解基本的 Android (Java 和 XML)开发。这里应用使用的样式名是 AppTheme ,它引用了主题的样式。Material 并设置自定义颜色值,设置在一个 colors.xml 文件中,使用 < item > 标签包含您的主题样式常量— colorPrimarycolorPrimaryDarkcolorAccent 。Android 很容易使用这些主题常量,所以你所要做的就是引用它们的自定义颜色值。

定制可穿戴材质主题状态栏:状态栏颜色

您还可以轻松定制主题的应用状态栏。材质,您可以指定另一种适合可穿戴应用品牌的颜色,并提供适当的颜色对比度来显示白色状态图标。要为你的应用状态栏设置自定义颜色,当你扩展一个主题时,添加一个 android:statusBarColor 属性 。材质样式定义。使用前面的示例,您的 XML 应该如下所示:

<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <item name="android:colorPrimary">@color/primary_color</item>
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <item name="android:colorAccent">@color/accent_color</item>
        <item name="android:statusBarColor">@color/status_bar</item>
    </style>
</resources>

如上所述,如果你没有特别指定,statusBarColor 常量将继承colorPrimaryDark 常量的值。你也可以使用 Android 5# aarggbb32 位十六进制颜色数据值的 alpha 通道组件在状态栏后面进行绘制。如果你想深入研究 Android graphics,可以看看《Pro Android Graphics(Apress 2013)这本书。

例如,如果你想将状态栏显示为完全透明,你可以使用一个@ Android:color/transparent常量,它将 alpha 通道设置为零(关闭或 #00000000 )。然而,这并不是一个好的 UI 设计实践,因为你可能在状态栏后面有一个白色的背景,这样会使状态栏图标不可见。

所以你真正想做的是在背景(图像、照片、3D、2D、艺术品)上创建一个带颜色的状态栏。您应该使用深色渐变来确保白色状态图标可见。为此,您可以使用 Android WindowManager 将 statusBarColor 设置为透明,并将 WindowManager 对象的 windowTranslucentStatus 属性的数据值设置为 true。LayoutParams 类(对象)FLAG _ TRANSLUCENT _ STATUS常量。还可以通过 Java 代码使用window . setstatusbarcolor()方法实现状态栏动画或半透明的淡入或淡出。

作为一个 UI 设计原则,你的 Android 状态栏对象应该总是与操作栏有一个清晰的界限,除非你在这些栏后面设计自定义 UI 图像或新媒体内容,在这种情况下,你应该使用你的变暗渐变,这将确保图标仍然可见。当您自定义 UI 导航(操作栏)和状态栏时,您应该使它们都透明,或者只更改状态栏的透明度。在所有其他情况下,导航栏应该保持黑色。

自定义可穿戴材质主题:单个视图主题

Android 风格和主题不仅可以用于在全球范围内定制整个可穿戴应用的外观和感觉,还可以用于设计本地屏幕的风格和主题,这些屏幕是应用的组成部分。

你可能会问,为什么要在 Android 5 中为一个单独的视图对象或活动对象开发一个风格或主题呢?

答案可以在 UI 设计的概念模块化 中找到,这是 Android 可穿戴应用开发的一个基石。一旦你使用 XML 文件开发了一个风格和主题,你就可以在任何需要的时候应用它,这可能会在你的可穿戴应用开发过程中多次出现。这样,您只需做一次 UI 设计工作(创建一个模块),然后就可以多次应用它。这也确保了每次都以完全相同的方式应用主题或样式。如果你需要更详细地了解 Android 5 开发的用户界面设计,本书Pro Android UI(2014 年出版)深入讨论了所有的 Android 用户界面设计问题。

你的 XML 用户界面布局容器定义(Android 布局容器从视图组子类化)中的 UI 元素(Android 窗口小部件可以引用一个 android:theme 属性 或者一个 android:style 属性。这允许您以模块化的方式引用预构建的样式和主题资源。

引用其中一个预构建的样式或主题属性将应用该 UI 元素以及该 UI 设计元素中的任何子元素。这项功能对于在可穿戴应用 UI 设计的特定部分更改主题调色板非常有用。

Android 材质设计视图小部件:列表和卡片

Android 5 API 提供了两个全新的视图子类(widgets)。这些可用于显示使用材质设计主题、样式、动画和特殊效果的信息卡或可回收清单。

RecyclerView widget 是 Android ListView 类的即插即用增强版。它支持许多布局类型,并提供性能改进。 CardView widget 允许你的可穿戴应用使用具有一致外观和感觉的“卡片”来显示上下文信息。

在我继续讨论阴影、动画和特殊效果(如可绘制的着色和颜色提取)之前,让我们先仔细看看新的 UI 设计工具。

Androidrecycle viewClass:优化(回收)列表查看

Android RecyclerView 是一个 UI 设计小部件,它是 Android ListView 小部件的一个功能更加丰富的版本。RecyclerView 用于显示大量应用数据列表。该类的独特之处在于视图中包含的数据可以非常高效地滚动。这是通过 RecyclerView ViewGroup(一个布局容器)子类实现的。在任一时刻,它在其 ViewGroup 布局容器中保存有限数量的数据(视图)对象。

这种内存优化原则与数字视频流的工作原理非常相似,只在系统内存中保留当前使用的数据列表部分,这使得该类更快,内存效率更高。当您的数据集合中的数据在运行时会根据应用最终用户的操作或网络事务发生变化时,您可能希望利用 Android 的 RecyclerView 小部件。

RecyclerView类通过向开发人员提供大量软件组件来实现所有这些,可穿戴开发人员可以在他们的代码中实现这些组件。其中包括用于在列表中定位数据视图项目的布局管理器、为数据视图项目操作添加视觉效果的动画,以及为可穿戴应用实现此 RecyclerView 小部件设计自定义布局管理器和动画的灵活性。

Android CardView 类:索引卡组织范例

Android CardView 类是 ViewGroup 布局容器类,扩展了 FrameLayout 类。Android FrameLayout 类允许您显示单个视图 UI 元素(小部件),因此 CardView 将是一个 FrameLayout 单个视图的集合,它是一堆 3x 5 索引卡的范例。这个类允许你在虚拟卡上显示可穿戴应用的任何信息数据,这些虚拟卡在 Android(应用、可穿戴、电视或 auto SDK)平台上具有一致的外观。

您的 CardView 小部件还可以为该 CardView 布局容器中的每张卡片添加阴影和圆角,尽管是 CardView 本身而不是每张单独的卡片添加阴影和圆角。要创建一个有阴影的卡片,需要使用一个card _ view:card levation属性 。

如果您的用户使用的是 Android 5 (API Level 21)或更高版本,CardView 类将访问实际高程属性并自动创建动态阴影,对于更早的 Android 版本,它将基于更早的版本创建可编程的阴影实现。

如果您想增强 CardView 小部件的外观,您可以提供一个自定义的圆角半径值,比如说 6dip,它将使用 cardCornerRadius 属性为 CardView 中的每张卡片创建圆角。

如果你想在你的 CardView 小部件后面显示一个背景图像,你可以提供一个自定义的背景颜色值,比如#77BBBBBB,它将使用cardbbackground color属性为你的 CardView 中的每张卡片创建一个浅灰色的透明背景颜色。

如果你想在 CardView 窗口小部件后面有一个阴影,你可以提供一个自定义的 elevation 值,比如说 5dip,这将使用 cardElevation 属性在 CardView 中的每张卡片后面创建一个漂亮的、高度可见的阴影。在使用 cardElevation 属性之前,您需要将名为 cardUseCompatPadding 的填充兼容性常数设置为 true 值,以便 CardView 计算 dropshadowing (elevation)效果。

要访问这些 CardView 属性,必须为 LinearLayout 父布局容器类和嵌套的 CardView 子布局容器类导入自定义 XMLNS(或 XML 命名架构)。这是通过在每个布局容器标记中使用以下 XML 参数来实现的:

xmlns:card_view=[http://schemas.android.com/apk/res-auto](http://schemas.android.com/apk/res-auto)

一旦设置好了,您就可以使用上面指定的属性,方法是在它们前面加上一个 card_view: 修饰符,这样您的 cardCornerRadius 属性就可以写成例如card _ view:cardCornerRadius

为了实现我在本节前面概述的三个示例,LinearLayout 父布局容器的标记(包含一个包含 TextView 对象的 CardView)类似于下面的 XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              xmlns:card_view="http://schemas.android.com/apk/res-auto" >
    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/my_card_view"
        android:layout_gravity="center"
        android:layout_width="180dip"
        android:layout_height="180dip"
        card_view:cardCornerRadius="6dip"
        card_view:cardBackgroundColor="#77BBBBBB"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="5dip" >
        <TextView android:id="@+id/info_text"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

现在让我们来看看材质设计中的特效应用,并学习投影和动画视图部件。

Android 材质设计效果:阴影和动画

虽然 Android 一直有一个阴影和动画功能集,它与 Android View 对象(称为 Android widgets)一起工作,但材质设计通过提供更高级的阴影将这些效果提升到了一个新的水平,以便屏幕上的所有东西都有一个 3D z 轴元素。例如,除文本对象之外的视图对象现在可以访问投影,并且现在有高级的过渡动画效果,如曲线插值运动和在屏幕上模拟 3D 效果的东西,如波纹。

Android 材质设计 3D 效果:自动视图阴影

除了 x 和 y 属性之外,从 Android 中的View类继承而来的 Android widgets 现在增加了第三个特性,z 轴属性。这个属性称为仰角属性,定义了视图对象的高度,进而决定了其阴影的特征。

正如许多熟悉 3D 的人所知,这将 Android UI 设计从 2D 带入了激动人心的 3D 领域。这使得照片般逼真的 i3D UI 设计成为可能,而在以前,只有“平面”的 2D UI 设计才是可能的。

添加这个新的 elevation 属性是为了表示视图对象相对于 UI 设计中它上面和下面的其他视图对象的高程或高度。Android 操作系统将使用 elevation 属性(或者如果您喜欢,属性或特征)来确定阴影的大小,因此具有较大 elevation 值的视图对象(小部件)应该投射较宽的阴影,使小部件看起来处于较高的高度。

UI 设计中的视图小部件也将通过 z 值获得它们的绘制顺序。这通常被称为 z 顺序z 索引,被分配了较高 z 值的 UI 视图对象将总是出现在被分配了较低 z 值的其他视图对象(窗口小部件)之上。

Android 材质设计动画:用户界面的触摸反馈

Android 5 中升级的动画 API 允许你为你的 UI 控件(小部件)创建自定义的触摸反馈动画。它们允许根据视图小部件状态的变化触发这些动画效果,还允许当用户在应用的活动屏幕之间导航时进行活动转换。

动画 API 的材质设计相关增强功能允许您使用新的触摸反馈动画来响应视图小部件上的触摸屏事件。这些实现了新的波纹元素( RippleDrawable 类),并且可以被定义为有界(包含在视图内)或无界(发散出视图边界)。使用 XML 定义它相当简单,尽管它也可以使用 Java 7 来定义。

要定义有界波纹触摸反馈动画,请在视图小部件标签的 android:background 参数中引用它,如下所示:

<Button android:id="@+id/my_rippling_muscles_I_mean_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackground" />

要定义无界波纹触摸反馈动画,再次使用 View 小部件标签中的 android:background 参数引用它,如下所示:

<Button android:id="@+id/my_rippling_abs_I_mean_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="?android:attr/selectableItemBackgroundBorderless" />

触摸反馈动画现在集成在几个标准视图小部件子类中,比如Button类。一个新的 API 允许您自定义这些触摸反馈动画,以便您可以将它们添加到您的自定义视图中。

用户现在可以使用圆形显示动画来隐藏和显示视图小部件,这为 Android 操作系统增加了另一个级别的惊喜因素。熟悉 2D 和 3D 图形的人会知道,这是通过将动画圆形(ShapeDrawable)剪辑形状应用到两个 UI 小部件视觉效果之间的渲染管道中来实现的。

Android 材质设计过渡:增强的活动过渡

在活动过渡动画区域,您现在可以使用自定义活动过渡动画在活动之间切换。每当用户使用 Intent 对象从一个活动转移到另一个活动时,Android 操作系统都会应用自定义活动转换。

这些活动动画旨在与其他材质设计动画效果结合使用。我怀疑添加这些是为了在整个 Android 5 可穿戴应用中统一 UX 的材质设计。现在,视图和活动对象都提供了预建的动画!你也可以创建自定义的过渡动画,就像在 Android 5 之前一样。

Android 5 材质设计中有四种不同类型的预建活动动画:进入退出控制全屏动画效果,shared elementerSharedElementExit 控制 UI 元素的本地化 UI 元素效果,这些元素是共享(在两个活动屏幕上)。

当用户从可穿戴应用中的另一个活动屏幕切换到新的活动屏幕时,将触发进入活动动画,因此,该进入转换确定活动中的视图窗口小部件如何进入屏幕。例如,在分解过渡中,视图小部件从屏幕外部进入屏幕,飞向屏幕中心。确保在你的活动中使用图形设计来增强这种过渡的特殊效果。

相反,当用户退出他们的可穿戴应用中的活动屏幕时,可以触发退出类型的活动动画。退出过渡将决定可穿戴活动中的视图小部件如何退出屏幕。例如,使用分解过渡示例,在退出过渡中,您的可穿戴应用视图窗口小部件将退出屏幕,远离中心,与进入分解过渡动画相反。

如果两个活动屏幕之间有共享的 UI 元素,那么共享元素转换可以应用于这个 UI 设计场景。正如您可能已经猜到的,这些被称为 SharedElementEnter 和 SharedElementExit 转换。SharedElement 转换决定了在两个活动屏幕之间共享的视图小部件将如何处理这些活动屏幕之间的转换。

例如,如果两个活动屏幕具有相同的数字图像,但其位置或分辨率不同,则 changeImageTransform 共享元素过渡将在两个活动屏幕之间平滑地转换(重新定位)或缩放(调整大小)图像。

还有其他共享元素转换,比如 changeBounds 共享元素转换,它将动画显示任何目标活动视图小部件的布局边界的任何变化。还有一个 changeTransform 共享元素转换,可以动画显示两个正在转换的活动屏幕之间目标视图小部件的缩放(大小)和旋转(方向)的任何变化。最后,有一个 changeClipBounds 共享元素转换,它将为目标活动视图小部件的剪辑路径边界中的任何变化制作动画,这些小部件被分配了剪辑路径。

Android 5 现在支持三种主要的进入和退出转换;这些也可以与共享元素转换结合使用。有爆炸过渡,它将视图小部件移入或移出屏幕中心,滑动过渡,它将视图小部件滑入或滑离场景边缘,以及渐变过渡,它通过改变视图小部件的不透明度值来添加或移除它们。

您可能想知道是否有任何方法可以创建自定义过渡。这是通过使用 Visibility 类创建一个定制的 transition 子类来实现的,Visibility 类是Transition类的一个子类,就是为了这个目的而创建的。

Android 材质设计运动:增强的运动曲线或路径

那些对 3D 动画软件(如 Blender3D)或数字视频编辑软件(如 Lightworks)有经验的人应该熟悉使用运动曲线来控制视频剪辑或场景中 3D 对象移动的速度变化率的概念。

这被称为运动曲线,因为它允许你精确地控制某物随时间移动的方式,这在电影制作、角色动画和游戏设计中很重要。还有另一个密切相关的工具叫做运动路径。运动路径定义了对象如何在 2D 或 3D 空间中移动。

因此,运动曲线是用于定义时间动画属性(动画速度随时间的变化)的工具,而运动路径是用于定义空间动画属性的工具。

Android 操作系统中的动画,以及新的 Android 5 材质设计,都依赖于这些使用插值器类的运动曲线。这个类现在可以用来定义更复杂的 4D 运动曲线插值(第四维,或 4D,意味着随时间的变化)。“材质设计”现在添加了运动路径来支持 2D 空间运动模式,因此现在不仅可以控制运动的速率,还可以控制运动发生的位置。

路径插值器类是一个基于贝塞尔的新插值器子类,贝塞尔是一种复杂类型的曲线定义数学。贝塞尔曲线在 Android 5 中已经实现为路径(类)对象。这个插值器类可以在 1 乘 1 的正方形中指定贝塞尔运动曲线,锚点在 0,0 和 1,1,并带有自定义的 x,y 控制点,这是开发人员使用 pathInterpolator 类的构造器方法参数指定的。您通常会使用 XML 资源定义一个 PathInterpolator 对象,如下所示:

<pathInterpolator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:controlX1="0.5"
    android:controlY1="0"
    android:controlX2="1"
    android:controlY2="1" />

这个 Android 5 操作系统为材质设计规范中的三个基本的新运动曲线提供了 XML 资源。这些将使用标记,并在您的 XML 标记或 Java 代码中引用,使用@interpolator/路径引用头,如下所示:

@interpolator/linear_out_slow_in.xml
@interpolator/fast_out_linear_in.xml
@interpolator/fast_out_slow_in.xml

Android 材质设计动画状态变化:statelistantimator

Android 状态变化,如手机上的信号指示器,现在可以使用新的 Android 5 材质设计功能集进行动画制作。这将允许可穿戴应用开发人员在其 Android 可穿戴应用设计中添加更多令人惊叹的元素。

新的 Android StateListAnimator 类允许开发人员使用 ObjectAnimator 对象,每当视图对象的状态改变时,这些对象就会被 Android 操作系统触发(运行)。将 StateListAnimator 设置为 XML 资源的方式利用了 <选择器> 标签(在不同的状态中进行选择)和 <设置> 标签(创建选择集),以及定义状态的 <项目> 标签和定义对象动画的 <对象动画器> 标签。一个简单的 pressed=truepressed = falsestatelistantimator 选择器对象以这种方式建立,使用四层(深层)嵌套 XML 结构:

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   <item android:state_pressed="true" >
      <set>
         <objectAnimator android:propertyName="translationZ"
             android:duration="120"
             android:valueTo="5dip"
             android:valueType="floatType" />
      </set>
   </item>
   <item android:state_pressed="false"
         android:state_enabled="true"
         android:state_focused="true" >
      <set>
         <objectAnimator android:propertyName="translationZ"
             android:duration="120"
             android:valueTo="0"
             android:valueType="floatType" />
      </set>
   </item>
</selector>

要将定制的状态变化动画附加到视图中,使用 XML 资源文件中的<selector>元素定义一个 ObjectAnimator,如上所示。接下来,使用Android:stateListAnimatorXML 参数在您希望受其影响的视图对象 XML 标记中引用它。

要将动画 StateListAnimator 中的这种状态变化分配给 Java 代码中的视图,您应该利用一个animation inflater . loadstatelistanimator()方法调用,然后记住使用View . setstatelistanimator()方法调用将这个 ObjectAnimator 分配给您的视图。

重要的是要记住,每当你的可穿戴应用主题扩展一个主题。材质材质设计主题,UI 按钮对象默认启用 z 动画(设置和激活)。为了避免 UI 按钮对象中的这种行为,在 XML 标记中将这个Android:statelistantimator属性设置为数据值 @null ,或者在 Java 代码中设置为“ null

接下来,让我们看看 Android 5 在 Android 4.x 中已经存在的大量 Android Drawable 类中添加了什么,以便能够通过动画矢量、位图图形、着色功能、颜色提取和新状态动画图形来提供这种大大增强的材质设计功能。

Android 材质设计图形处理:Drawables

还有一些新的用于材质设计的可绘制 API 功能,使得使用 Android 可绘制对象来帮助您为您的应用实现流畅的材质设计变得更加容易。新的 Android Drawable 类包括 VectorDrawable、AnimatedVectorDrawable、RippleDrawable、Palette 和 AnimatedStateListDrawable,所有这些我将在本节中讨论。

这些新的 Android 5 可绘制类为 Android 操作系统添加了可扩展矢量图形(SVG)路径支持、变形、i3D 波纹特效、调色板颜色提取和多状态可绘制对象的动画过渡。Android 5 增加了一些非常强大的类,涉及到 2D 矢量和位图图形!

Android 5 可绘制调色:。setTint( )。setImageTintMode( )

使用 Android 5 及以上版本,可以着色 BitmapDrawable 对象以及 NinePatchDrawable 对象。您可以对整个数码图像对象进行着色,或者将这种着色效果限制在某些像素上。这是通过定义 alpha 通道来“掩盖”着色效果来实现的。

您可以使用 Android 颜色类资源或引用这些颜色类资源的 Android 主题属性来着色这些可绘制对象。通常,您只需创建一次这些资源,然后在您的可穿戴应用中使用它们,使用着色功能根据需要给它们着色,以匹配您的主题。正如您所想象的,您可以使用它来进行优化,因为您在整个应用中使用的图形图像资源要少得多。

您可以使用为可穿戴应用的 Java 代码中的 BitmapDrawable 或 NinePatchDrawable 对象应用色调。setTint( ) 方法。还可以在 XML UI 布局容器定义中设置色调颜色和色调模式。这是通过使用视图对象标签中的 android:tintandroid:tintMode 参数(属性)来实现的。

Android 5 矢量可绘制对象: VectorDrawable

新的 Android 5 VectorDrawable类和使用该类创建的对象可以在不损失任何质量的情况下放大或缩小。这是因为,与位图图像不同,矢量图像由代码和数学(线条、曲线、填充和渐变)组成,而不是像素。因此,如果发生缩放,矢量图像实际上将被渲染以填充可用于显示它的像素数量。矢量图像在缩放时不会像基于像素的图像那样被重新采样,而是会被重新渲染以适应新的屏幕分辨率,无论是 320 x 240 的智能手表还是 4096 x 2160 的 iTV。

出于这个原因,矢量图像可以从可穿戴设备一直使用到 4K 独立电视,具有相同的视觉质量。使用位图图像是不可能的。因为矢量图像是基于文本的,所以它的数据密度至少比位图图像高一个数量级,因为矢量是代码(数学和文本),而不是数据密集型像素值的数组。

正如你可能想象的那样,矢量图像非常适合单色应用图标。矢量图像只需要一个图像资源,与位图图像格式相反,位图图像格式需要为每个屏幕密度提供一个资源文件。要创建一个矢量图像,您需要在一个<vector> XML 父标签中为形状定义 SVG 数据。定义彩色填充正方形的 SVG 矢量图像的 XML 标记如下所示:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:height="320dip"
        android:width="320dip"
        android:viewportWidth="160"
        android:viewportHeight="160" >
        <path android:fillColor="#AACCEE"
              android:pathData="M0,0 L0,100 100,100 100,0 Z" />
</vector>

SVG 图像使用 VectorDrawable 对象封装在 Android 5 中。有关 SVG 路径命令语法的信息,请参见 W3C 网站上的 SVG 路径参考(http://www.w3.org/TR/SVG/paths.html)。我在《Java 8 游戏开发入门(2014 年出版)一书中也深入讨论了这一点,因为 Java 8 和 JavaFX 拥有广泛的 SVG 路径支持。

你还可以通过制作 VectorDrawable 对象的 SVG path 属性动画来模拟流行的多媒体软件类型,称为扭曲变形,这要归功于另一个全新的 Android 5 类 AnimatedVectorDrawable。

接下来让我们仔细看看所有新的 Android 5(自动)颜色提取功能,这些功能是由 Android Palette 类提供的。

Android 5 自动调色板提取:调色板

Android 5 增加了一个新的调色板类,它有助于一个颜色提取算法,允许开发人员从你的应用中的位图图像素材中自动提取突出的颜色。Android 支持库 r21 和更高版本包括 Palette 类,它允许您在版本 5 之前的 Android 应用版本中从图像中提取突出的颜色,例如 Android 3.x 和 Android 4.x 应用。调色板将从位图图像的色谱中提取以下类型的突出颜色:

  • 响亮的
  • 充满活力的黑暗
  • 明亮的光线
  • 柔和的
  • 柔和的暗色
  • 柔和的光线

Palette 类是一个助手类,它帮助开发人员提取六种不同的颜色分类(如上所列)。要使用这个助手类,您可以将想要调色板化的位图对象传递给调色板类的。生成【位图图像】的方法,使用下面的方法调用:

Palette.generate(Bitmap imageAssetName);

请确保在加载图像资源的后台线程中执行此操作。如果不能使用后台线程,也可以调用调色板类的。generateaync()方法,提供一个监听器代替,像这样:

public AsyncTask<Bitmap, Void, Palette> generateAsync (Bitmap bmp, Palette.PaletteAsyncListener pal)

您还可以使用调色板类中的 getter 方法从图像中检索突出的颜色,如。getVibrantColor( )。getMutedColor( ) 。一个。generate( ) 方法将返回一个 16 色调色板。如果需要更多,可以用另一个(重载)。generate( ) 方法采用如下格式:

Palette.generate(Bitmap image, int numColorsInPalette);

我查看了这个调色板类的源代码,似乎没有任何你可以要求这个类提供的最大颜色数(大多数调色板最大值是 8 位颜色,或 256 种颜色)。这为这个类提供了一些非常有趣的应用,因为它不依赖于 8 位颜色。调色板中要求的颜色越多,处理时间就越长。这就是为什么有一个 AsyncTask < > 版本的。generate( ) 方法调用!

要在可穿戴设备应用的 IntelliJ 项目中使用 Palette 类,您需要将以下 Gradle 依赖项添加到应用的模块中:

dependencies { ... (default Gradle dependencies remain in here)
               compile 'com.android.support:palette-v7:21.0.+'  }

Android 5 状态动画:一个AnimatedStateListDrawable

除了新的 Android RippleDrawable 类和 VectorDrawable 类之外,还有一个全新的 AnimatedStateListDrawable 类,它可以创建 StateListDrawable 对象之间的动画过渡。

Android AnimatedStateListDrawable 类允许您创建可绘制对象的动画状态列表(因此有了类名),该类在引用的视图小部件的状态变化之间调用动画。Android 5 中的一些系统小部件将默认使用这些动画。下列范例显示如何使用 XML 资源来定义 AnimatedStateListDrawable:

<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/pressed"
          android:drawable="@drawable/drawable_pressed"
          android:state_pressed="true" />
    <item android:id="@+id/focused"
          android:drawable="@drawable/drawable_focused"
          android:state_focused="true" />
    <item android:id="@id/default"
          android:drawable="@drawable/drawable_default" />
    <transition android:fromId="@+id/default"
                android:toId="@+id/pressed" >
          <animation-list>
                <item android:duration="85"
                      android:drawable="@drawable/asset1" />
                <item android:duration="85"
                      android:drawable="@drawable/asset2" />
          </animation-list>
    </transition>
    <transition android:fromId="@+id/pressed"
                android:toId="@+id/default" >
          <animation-list>
                <item android:duration="85"
                      android:drawable="@drawable/asset2" />
                <item android:duration="85"
                      android:drawable="@drawable/asset1" />
          </animation-list>
    </transition>
</animated-selector>

<动画选择器> XML 定义的上半部分定义了状态,使用 <条目> 标签指定每个状态,下半部分定义了过渡,使用(惊奇) <过渡> 标签,其中嵌套了 <动画列表> 标签。

你将从这本书中学到什么

这本书将重点介绍 Android 5 操作系统和 IntelliJ IDEA 的那些功能,这些功能用于使用 Android Studio 和 Wear SDK 创建 Android 可穿戴应用。如果你需要基础的 Android 5 应用开发知识,或者想学习如何为 Neptune Pine(或另一款不使用 Wear SDK 的智能手表)创建可穿戴应用,可以看看我的书绝对初学者的 Android 应用(第三 e 2014,Apress)。

这本书的第一部分将为这本书的其余部分奠定基础,包括这一章涵盖可穿戴类型、概念和 Android 操作系统的新 Android 5 材质设计。然后,您将建立一个开发工作站,浏览 Android 的可穿戴功能,并了解新的 IntelliJ IDEA。在本书中,您还将设置用于测试可穿戴应用的模拟器。

本书的第二部分将向您展示如何使用 Wear SDK 为智能手表创建可穿戴应用。您将了解 Android 技术中对于可穿戴应用开发人员来说非常重要的领域,例如创建和交付可穿戴应用、通知、数据层、同步和用户界面布局设计、使用卡片和列表。

这本书的第三部分将解释如何使用 Android Watch Faces API 创建智能手表面孔。您将了解如何创建手表面孔服务,如何将手表面孔绘制到屏幕上,如何设计 Android 手表面孔,如何优化手表面孔以获得最佳性能,如何显示手表面孔设计中的信息(数据),以及如何为手表面孔创建手表面孔应用配置屏幕。

摘要

在第一章中,你看了一下可穿戴设备的类型和概念,并了解了谷歌为 Android 5 操作系统添加的许多新功能。你看了蓝牙 LE,材质设计,新的可绘制类型,高级 3D 比如 OpenGL ES 3.1。

在下一章中,您将把您的开发工作站和所有开源软件放在一起,您将能够使用它们来开发您的高级 pro Android 可穿戴应用。