零、前言

许多年前,在安卓和 iPhone 推出之前,人们最关心的问题之一是拥有一个购买和下载移动应用的中心位置。如今,我们以牺牲应用的可发现性为代价,利用谷歌 Play 等广泛可用的集中式应用商店来解决这个问题。

谷歌 Play 和其他任何移动应用商店一样,高度饱和。除非一个应用做了一些独特的事情或者有一些特别的东西,否则很难从几十个做着大致相同的事情的应用中脱颖而出,或者即使它们完全不相关。

增加营销支出可能会暂时缓解这个问题,但从长远来看,应用仍然需要找出使它们与众不同的独特功能或细节。

制作一个与众不同的应用的一种方法是稍微偏离安卓标准小部件和用户界面组件,并包括一个特定的自定义视图自定义菜单,或者,在一天结束时,任何使其与众不同的东西。我们应该意识到,这并不意味着我们应该完全忽略安卓标准小部件,重写应用的整个 UI。和几乎所有事情一样,做用户测试,发现什么对他们有效,什么对他们无效。探索新的选择,解决他们的痛苦,但不要过度。有时,在应用的顶部创建一个特定的菜单可能会解决导航问题,或者一个定义良好的动画可能会为应用的用户传达正确的过渡。

在本书中,我们将看到如何开始为安卓构建定制视图,并将它们集成到我们的应用中。我们将详细了解如何使用 2D 和 3D 渲染功能与它们交互并添加动画和综合示例。最后,我们还将看到如何共享我们的定制视图,以便它们可以在我们的企业环境中重用,以及如何开源它们并使它们对安卓开发社区可用。

这本书涵盖了什么

第 1 章入门,解释了什么是自定义视图以及我们什么时候需要它们,并向您展示了如何构建您的第一个自定义视图。

第 2 章实现您的第一个自定义视图,更详细地介绍了测量、实例化、参数化和一些基本渲染,以开始了解我们可以使用自定义视图做什么。

第 3 章处理事件,向读者展示了如何让自定义视图具有交互性并对用户交互做出反应。

第 4 章高级 2D 渲染,增加了额外的渲染原语和操作,以及如何组合它们来构建更复杂的自定义视图。

第五章介绍 3D 自定义视图,由于我们不仅仅局限于 2D 渲染,本章介绍如何使用 OpenGL ES 在 3D 中渲染自定义视图。

第 6 章动画,讲述了如何通过使用标准安卓组件和自己动手将动画添加到自定义视图中。

第 7 章性能注意事项公开了构建自定义视图时的一些建议和最佳实践,以及不遵循这些建议和实践可能会产生的影响。

第 8 章分享我们的定制视图,介绍了如何打包和分享我们的定制视图并使其公开。

第 9 章实现自己的 EPG ,展示了如何通过结合我们在书中看到的许多东西来构建一个更复杂的自定义视图示例。

第 10 章构建图表组件,详细展示了如何构建图表自定义视图并使其可逐步自定义。

第 11 章创建 3D 纺车菜单,讲述了如何构建更复杂的 3D 自定义视图,可用作选择菜单。

这本书你需要什么

为了遵循本书中的示例,您需要安装安卓工作室。我们将在第一章简要介绍如何安装和设置设备仿真器。强烈建议至少获得 Android Studio 3.0。在撰写本书时,Android Studio 3.0 仍处于测试阶段,但足够稳定,可以开发、运行和测试所有示例。此外,我们建议使用安卓设备,以便在我们将创建的自定义视图中更好地体验用户交互,但它们也将在安卓模拟器中工作。

这本书是给谁的

这本书是为那些想要提高他们的安卓应用开发技能并使用定制视图构建安卓应用的开发人员准备的。

约定

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和推特句柄如下所示:

“我们可以使用getWidth()getHeight()方法分别获取视图的宽度和高度。”

代码块设置如下:

<com.packt.rrafols.customview.OwnTextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Hello World!" /> 

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

float maxLabelWidth = 0.f; 
if (regenerate) { 
    for (int i = 0; i<= 10; i++) { 
        float step; 
 if (!invertVerticalAxis) {
 step = ((float) i / 10.f);
 } else {
 step = ((float) (10 - i)) / 10.f;
}

新术语和重要词汇以粗体显示,例如,它们出现在文本中,如下所示:“布局通常被称为视图组。

Warnings or important notes appear in a box like this. Tips and tricks appear like this.

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。

要给我们发送一般反馈,只需发送电子邮件feedback@packtpub.com,并在您的邮件主题中提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

你可以从你在http://www.packtpub.com的账户下载这本书的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的“支持”选项卡上。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书的名称。
  5. 选择要下载代码文件的书籍。
  6. 从您购买这本书的下拉菜单中选择。
  7. 点击代码下载。

下载文件后,请确保使用最新版本的解压缩文件夹:

  • 视窗系统的 WinRAR / 7-Zip
  • zipeg/izp/un ARX for MAC
  • 适用于 Linux 的 7-Zip / PeaZip

这本书的代码包也托管在 GitHub 上,网址为。我们还有来自丰富的图书和视频目录的其他代码包,可在https://github.com/PacktPublishing/获得。看看他们!

正误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现一个错误,也许是文本或代码中的错误,如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表格链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

海盗行为

互联网上版权材质的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过copyright@packtpub.com联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在questions@packtpub.com联系我们,我们将尽最大努力解决问题。