关于我们
书单推荐
新书推荐
|
鸿蒙HarmonyOS应用开发从入门到精通(第2版) 读者对象:普通读者
华为自主研发的 HarmonyOS(鸿蒙系统)是一款面向未来、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。本书采用 HarmonyOS 2.0 版本作为基石,详细介绍如何基于 HarmonyOS 进行应用的开发,包括 HarmonyOS 架构、DevEco Studio、应用结构、Ability、任务调度、公共事件、通知、剪贴板、Java UI、JS UI、多模输入、线程管理、视频、图像、相机、音频、媒体会话管理、媒体数据管理、安全管理、二维码、通用文字识别、蓝牙、WLAN、网络管理、电话服务、设备管理、数据管理等多个主题。本书辅以大量的实战案例,图文并茂,让读者易于理解和掌握。同时,本书的案例选型偏重于解决实际问题,具有很强的前瞻性、应用性和趣味性。加入 HarmonyOS 生态,让我们一起构建万物互联的新时代!
本书主要面向的是对移动应用或对 HarmonyOS 应用感兴趣的学生、开发人员和架构师。
柳伟卫
---------------------------- 柳伟卫,网名老卫、waylau,在IT公司担任项目经理、架构师、高级技术顾问等职位,是CSDN、 开源中国、阿里云开发者、华为开发者等技术社区专家,慕课网、华为开发者联盟社区认证讲师,HarmonyOS技术达人,曾获2021、2022年度牛人之星、2022年度OpenHarmony开源贡献之星。著有《跟老卫学HarmonyOS开发》等开源书,并出版了《鸿蒙HarmonyOS手机应用开发实战》《鸿蒙HarmonyOS应用开发从入门到精通》《Spring Boot 2.0企业级应用开发实战》《Spring Cloud 微服务架构开发实战》《Spring 5 开发大全》《Cloud Native 分布式架构原理与实践》《大型互联网应用轻量级架构实战》等专著。
第1章 鸿蒙缘起——HarmonyOS简介
1.1 HarmonyOS产生的背景2
1.1.1 为什么需要HarmonyOS2
1.1.2 HarmonyOS概述3
1.1.3 OpenHarmony、HarmonyOS、HarmonyOS NEXT与鸿蒙的
联系与区别4
1.1.4 HarmonyOS应用开发4
1.2 技术理念5
1.2.1 一次开发,多端部署5
1.2.2 可分可合,自由流转7
1.2.3 统一生态,原生智能8
1.3 架构介绍8
1.3.1 内核层9
1.3.2 系统服务层10
1.3.3 框架层11
1.3.4 应用层11
1.4 HarmonyOS 2新特性概述12
1.4.1 Harmony 2.0 Canary13
1.4.2 HarmonyOS v2.2 Beta213
1.5 HarmonyOS 3新特性概述14
1.5.1 HarmonyOS 3.1 Release14
1.5.2 HarmonyOS 3.2 Release15
1.6 HarmonyOS 4新特性概述16
1.7 Java与ArkTS如何抉择16
1.7.1 HarmonyOS编程语言的发展16
1.7.2 HarmonyOS编程语言的选择17
第2章 先利其器——开发环境搭建
2.1 注册华为开发者联盟账号19
2.1.1 开发者享受的权益19
2.1.2 注册、认证准备的资料19
2.1.3 注册账号19
2.1.4 登录账号20
2.1.5 实名认证20
2.2 DevEco Studio下载安装22
2.2.1 运行环境要求23
2.2.2 下载和安装DevEco Studio23
2.3 设置DevEco Studio24
2.3.1 基本设置24
2.3.2 详细设置26
第3章 牛刀小试—— 开发第一个HarmonyOS应用
3.1 使用Java创建一个新应用29
3.1.1 选择创建新工程29
3.1.2 选择设备应用类型的模板29
3.1.3 配置项目的信息29
3.1.4 自动生成工程代码30
3.2 运行项目30
3.2.1 启动远程模拟器30
3.2.2 启动本地模拟器31
3.2.3 在模拟器里面运行项目33
3.3 使用DevEco Studio预览器33
3.3.1 如何安装预览器33
3.3.2 如何使用预览器34
3.4 使用ArkTS创建一个新应用34
3.4.1 选择创建新工程34
3.4.2 选择设备应用类型的模板34
3.4.3 配置项目的信息35
3.4.4 自动生成工程代码35
3.4.5 查看应用运行效果36
第4章 应用初探——探索HarmonyOS应用
4.1 App38
4.1.1 什么是App38
4.1.2 代码层次的应用39
4.2 Ability39
4.2.1 Ability类39
4.2.2 AbilitySlice类40
4.2.3 UI界面40
4.3 库文件40
4.4 资源文件40
4.4.1 限定词目录41
4.4.2 资源组目录42
4.5 配置文件43
4.5.1 config.json配置文件的组成44
4.5.2 app.json5配置文件的组成45
4.5.3 module.json5配置文件的组成46
4.6 pack.info47
第5章 Ability基础知识
5.1 Ability概述49
5.1.1 Ability分类49
5.1.2 FA49
5.1.3 PA49
5.1.4 UIAbility49
5.1.5 ExtensionAbility50
5.2 Stage模型介绍50
5.2.1 Stage模型的设计思想50
5.2.2 Stage模型的Ability生命周期51
5.2.3 Stage模型的Ability启动模式51
5.3 Page Ability53
5.3.1 Page Ability基本概念53
5.3.2 多个AbilitySlice构成一个Page54
5.3.3 AbilitySlice路由配置54
5.3.4 不同Page间导航55
5.4 实战:多个AbilitySlice间的路由和导航55
5.4.1 创建应用55
5.4.2 新建Page Ability55
5.4.3 修改PayAbilitySlice样式布局57
5.4.4 实现AbilitySlice之间的路由和
导航59
5.4.5 运行61
5.5 Page与AbilitySlice生命周期62
5.5.1 Page生命周期62
5.5.2 AbilitySlice生命周期64
5.5.3 Page与AbilitySlice生命周期的
关联64
5.6 实战:Page与AbilitySlice生命周期的例子65
5.6.1 修改MainAbilitySlice65
5.6.2 修改PayAbilitySlice66
5.6.3 运行68
5.7 Service Ability70
5.7.1 创建Service70
5.7.2 启动Service72
5.7.3 连接Service73
5.7.4 Service Ability生命周期74
5.8 实战:Service Ability生命周期的例子75
5.8.1 创建Service75
5.8.2 创建远程对象77
5.8.3 修改MainAbilitySlice78
5.8.4 修改ability_main.xml81
5.8.5 运行82
5.9 Data Ability83
5.9.1 URI83
5.9.2 访问Data84
5.10 实战:通过DataAbilityHelper访问文件85
5.10.1 创建DataAbility85
5.10.2 修改UserDataAbility88
5.10.3 创建文件90
5.10.4 修改MainAbilitySlice90
5.10.5 创建FileUtils类92
5.10.6 运行93
5.11 实战:通过DataAbilityHelper访问
数据库93
5.11.1 创建DataAbility93
5.11.2 初始化数据库96
5.11.3 重写query方法97
5.11.4 重写insert方法98
5.11.5 重写update方法98
5.11.6 重写delete方法99
5.11.7 修改MainAbilitySlice99
5.11.8 运行103
5.12 Intent104
5.12.1 Operation与Parameters104
5.12.2 根据Ability的全称启动应用105
5.12.3 实战:根据Operation的其他属性
启动应用106
5.13 实战:Stage模型Ability内页面的跳转和数据传递111
5.13.1 新建Ability内页面112
5.13.2 页面跳转及传参113
5.13.3 参数接收115
5.13.4 运行116
5.14 Want概述117
5.14.1 Want的用途117
5.14.2 Want的类型117
5.14.3 Want参数属性119
5.15 实战:通过显式Want启动
Ability120
5.15.1 新建Ability内页面120
5.15.2 新建Ability120
5.15.3 使用显式Want启动Ability121
5.15.4 运行123
5.16 实战:通过隐式Want打开应用
管理123
5.16.1 使用隐式Want启动Ability123
5.16.2 运行124
第6章 安全管理
6.1 权限基本概念126
6.2 权限运作机制127
6.3 权限约束与限制127
6.4 应用权限列表127
6.4.1 权限分类127
6.4.2 敏感权限128
6.4.3 非敏感权限128
6.4.4 受限开放的权限130
6.5 FA模型应用权限开发流程130
6.5.1 权限申请130
6.5.2 自定义权限131
6.5.3 访问权限控制133
6.5.4 接口说明134
6.5.5 动态申请权限开发步骤134
6.6 Stage模型访问控制开发步骤136
6.6.1 权限申请136
6.6.2 权限授权137
6.7 实战:访问控制授权137
6.7.1 场景介绍138
6.7.2 声明访问的权限138
6.7.3 申请授权user_grant权限138
6.7.4 运行140
6.8 生物特征识别约束与限制140
6.9 生物特征识别开发流程141
6.9.1 接口说明141
6.9.2 开发准备142
6.9.3 开发过程142
第7章 Ability公共事件与通知
7.1 公共事件与通知概述145
7.1.1 公共事件和通知145
7.1.2 约束与限制145
7.2 公共事件服务146
7.2.1 接口说明146
7.2.2 发布公共事件147
7.2.3 订阅公共事件150
7.2.4 退订公共事件152
7.3 实战:公共事件服务发布事件152
7.3.1 修改ability_main.xml152
7.3.2 修改MainAbilitySlice153
7.3.3 运行155
7.4 实战:公共事件服务订阅事件155
7.4.1 修改ability_main.xml156
7.4.2 创建CommonEventSubscriber156
7.4.3 修改MainAbility157
7.4.4 修改配置文件158
7.4.5 运行159
7.5 高级通知服务160
7.5.1 接口说明160
7.5.2 创建NotificationSlot162
7.5.3 发布通知163
7.5.4 取消通知164
7.6 实战:通知发布与取消164
7.6.1 修改ability_main.xml164
7.6.2 修改MainAbilitySlice165
7.7 实战:Stage模型的订阅、发布、取消公共事件168
7.7.1 添加按钮168
7.7.2 添加Text显示接收的事件169
7.7.3 设置按钮的点击事件方法169
7.7.4 运行171
第8章 用ArkUI开发UI
8.1 ArkUI概述173
8.1.1 ArkUI基本概念173
8.1.2 ArkUI主要特征174
8.1.3 JS、TS、ArkTS、ArkUI、ArkCompiler之间的联系174
8.2 声明式开发范式175
8.2.1 声明式开发范式与类Web开发
范式175
8.2.2 声明式开发范式的基础能力176
8.2.3 声明式开发范式的整体架构176
8.2.4 声明式开发范式的基本组成177
8.3 常用组件177
8.4 基础组件详解178
8.4.1 Blank178
8.4.2 Button179
8.4.3 Checkbox180
8.4.4 CheckboxGroup181
8.4.5 DataPanel182
8.4.6 DatePicker182
8.4.7 Divider183
8.4.8 Gauge184
8.4.9 Image185
8.4.10 ImageAnimator187
8.4.11 LoadingProgress189
8.4.12 Marquee189
8.4.13 Navigation189
8.4.14 PatternLock190
8.4.15 Progress191
8.4.16 QRCode191
8.4.17 Radio192
8.4.18 Rating192
8.4.19 RichText192
8.4.20 ScrollBar193
8.4.21 Search195
8.4.22 Select195
8.4.23 Slider196
8.4.24 Span197
8.4.25 Stepper与StepperItem198
8.4.26 Text199
8.4.27 TextArea201
8.4.28 TextClock201
8.4.29 TextInput202
8.4.30 TextPicker203
8.4.31 TextTimer203
8.4.32 TimePicker204
8.4.33 Toggle204
8.4.34 Web205
8.5 容器组件详解206
8.5.1 Column和Row207
8.5.2 ColumnSplit和RowSplit208
8.5.3 Flex209
8.5.4 Grid和GridItem210
8.5.5 GridRow和GridCol211
8.5.6 List、ListItem和
ListItemGroup211
8.5.7 AlphabetIndexer212
8.5.8 Badge214
8.5.9 Counter215
8.5.10 Navigator216
8.5.11 Panel218
8.5.12 Refresh219
8.5.13 RelativeContainer219
8.5.14 Scroll221
8.5.15 SideBarContainer222
8.5.16 Stack223
8.5.17 Swiper223
8.5.18 Tabs和TabContent224
8.6 媒体组件详解225
8.7 绘制组件详解225
8.7.1 Circle和Ellipse226
8.7.2 Line227
8.7.3 Polyline228
8.7.4 Polygon229
8.7.5 Path230
8.7.6 Rect233
8.7.7 Shape234
8.8 画布组件详解237
8.9 常用布局238
8.9.1 自适应布局238
8.9.2 响应式布局240
8.10 实战:使用ArkUI实现“登录”
界面240
8.10.1 使用Column容器实现整体
布局240
8.10.2 使用Image组件实现标志展示241
8.10.3 使用TextInput组件实现账号密码的输入241
8.10.4 使用Button组件实现登录按钮242
8.10.5 使用Text组件实现注册按钮242
8.10.6 完整代码242
8.11 实战:使用ArkUI实现“计算器”244
8.11.1 新增Calculator.ets文件244
8.11.2 实现递归运算244
8.11.3 实现输入字符串转为字符串
数组246
8.11.4 新增CalculatorButtonInfo.ets文件247
8.11.5 实现CalculatorButton组件247
8.11.6 构造整体页面249
8.11.7 运行250
第9章 用Java开发UI
9.1 用Java开发UI概述252
9.1.1 组件和布局252
9.1.2 Component和
ComponentContainer252
9.1.3 LayoutConfig253
9.1.4 组件树253
9.2 组件与布局253
9.2.1 编写布局的方式254
9.2.2 组件分类254
9.3 实战:通过XML创建布局255
9.3.1 理解XML布局文件255
9.3.2 创建XML布局文件256
9.3.3 加载XML布局257
9.3.4 显示XML布局258
9.4 实战:通过Java创建布局259
9.4.1 新建AbilitySlice259
9.4.2 创建布局260
9.4.3 在布局中添加组件261
9.4.4 显示布局262
9.5 实战:常用显示类组件——Text262
9.5.1 设置背景262
9.5.2 设置字体大小和颜色264
9.5.3 设置字体风格和字重264
9.5.4 设置文本对齐方式265
9.5.5 设置文本换行和最大显示行数266
9.5.6 设置自动调节字体大小267
9.5.7 实现跑马灯效果269
9.5.8 场景示例270
9.6 实战:常用显示类组件——
Image272
9.6.1 创建Image272
9.6.2 设置透明度273
9.6.3 设置缩放系数274
9.7 实战:常用显示类组件——ProgressBar275
9.7.1 创建ProgressBar275
9.7.2 设置方向275
9.7.3 设置颜色276
9.7.4 设置提示文字277
9.8 实战:常用交互类组件——
Button278
9.8.1 创建Button278
9.8.2 设置点击事件280
9.8.3 设置椭圆按钮282
9.8.4 设置圆形按钮283
9.9 实战:常用交互类组件——TextField288
9.9.1 创建TextField288
9.9.2 设置多行显示289
9.9.3 场景示例290
9.10 实战:常用交互类组件——Checkbox291
9.10.1 创建Checkbox292
9.10.2 设置选中和取消选中时的颜色292
9.11 实战:常用交互类组件——RadioButton/RadioContainer293
9.11.1 创建RadioButton/RadioContainer293
9.11.2 设置显示单选结果295
9.12 实战:常用交互类组件——
Switch298
9.12.1 创建Switch298
9.12.2 设置文本299
9.13 实战:常用交互类组件——ScrollView299
9.13.1 创建ScrollView300
9.13.2 配置Text显示的内容300
9.14 实战:常用交互类组件——
Tab/TabList301
9.14.1 创建TabList302
9.14.2 响应焦点变化304
9.15 实战:常用交互类组件——Picker305
9.15.1 创建Picker305
9.15.2 格式化Picker的显示306
9.15.3 日期滑动选择器DatePicker307
9.15.4 时间滑动选择器TimePicker308
9.16 实战:常用交互类组件——ListContainer309
9.16.1 创建ListContainer309
9.16.2 创建ListContainer子布局309
9.16.3 创建ListContainer数据
包装类310
9.16.4 创建ListContainer数据
提供者310
9.16.5 修改MainAbilitySlice312
9.17 实战:常用交互类组件——RoundProgressBar313
9.17.1 创建RoundProgressBar313
9.17.2 设置开始和结束角度313
9.18 实战:常用布局——DirectionalLayout314
9.18.1 创建DirectionalLayout315
9.18.2 设置水平排列316
9.18.3 设置权重317
9.19 实战:常用交互类组件——DependentLayout318
9.19.1 创建DependentLayout319
9.19.2 相对于同级组件320
9.19.3 相对于父组件320
9.19.4 场景示例320
9.20 实战:常用交互类组件——StackLayout322
9.21 实战:常用交互类组件——TableLayout323
第10章 设备管理
10.1 设备管理概述327
10.1.1 传感器327
10.1.2 控制类小器件328
10.1.3 位置329
10.2 实战:传感器示例330
10.2.1 接口说明330
10.2.2 创建应用330
10.2.3 修改ability_main.xml330
10.2.4 修改MainAbilitySlice331
10.2.5 运行334
10.3 实战:Light示例336
10.3.1 接口说明336
10.3.2 创建应用336
10.3.3 修改ability_main.xml336
10.3.4 修改MainAbilitySlice337
10.3.5 运行340
10.4 实战:获取设备的位置340
10.4.1 接口说明341
10.4.2 创建应用341
10.4.3 声明权限341
10.4.4 修改ability_main.xml342
10.4.5 修改MainAbilitySlice343
10.4.6 运行346
10.5 实战:(逆)地理编码转化347
10.5.1 接口说明347
10.5.2 创建应用347
10.5.3 修改ability_main.xml348
10.5.4 修改MainAbilitySlice348
10.5.5 运行351
第11章 数据管理
11.1 数据管理概述353
11.2 关系型数据库353
11.2.1 基本概念354
11.2.2 运作机制354
11.2.3 默认配置354
11.2.4 约束与限制354
11.2.5 接口说明355
11.2.6 开发过程357
11.3 对象关系映射数据库358
11.3.1 基本概念359
11.3.2 运作机制359
11.3.3 实体对象属性支持的类型360
11.3.4 接口说明360
11.4 实战:使用对象关系映射数据库362
11.4.1 修改build.gradle362
11.4.2 新增User363
11.4.3 新增UserStore364
11.4.4 创建DataAbility365
11.4.5 初始化数据库368
11.4.6 新增queryAll方法369
11.4.7 新增insert方法369
11.4.8 新增update方法370
11.4.9 新增deleteAll方法370
11.4.10 修改ability_main.xml371
11.4.11 修改MainAbilitySlice372
11.4.12 运行375
11.5 轻量级偏好数据库377
11.5.1 基本概念377
11.5.2 运作机制377
11.5.3 约束与限制378
11.5.4 接口说明378
11.6 实战:使用轻量级偏好数据库379
11.6.1 修改ability_main.xml379
11.6.2 修改MainAbilitySlice381
11.6.3 运行385
11.7 数据存储管理386
11.7.1 基本概念386
11.7.2 运作机制387
11.7.3 接口说明387
11.8 实战:使用数据存储管理388
11.8.1 修改ability_main.xml388
11.8.2 修改MainAbilitySlice389
11.8.3 运行391
11.9 实战:Stage模型的关系型数据库开发391
11.9.1 操作RdbStore391
11.9.2 账目信息的表示394
11.9.3 操作账目信息表394
11.9.4 设计界面397
11.9.5 运行399
11.10 实战:Stage模型的首选项开发399
11.10.1 操作Preferences400
11.10.2 账目信息的表示401
11.10.3 设计界面402
11.10.4 运行404
第12章 线程管理
12.1 线程管理概述406
12.2 场景介绍406
12.2.1 传统Java多线程管理406
12.2.2 HarmonyOS多线程管理408
12.3 接口说明408
12.3.1 GlobalTaskDispatcher409
12.3.2 ParallelTaskDispatcher409
12.3.3 SerialTaskDispatcher409
12.3.4 SpecTaskDispatcher410
12.4 实战:线程管理示例410
12.4.1 修改ability_main.xml410
12.4.2 自定义任务411
12.4.3 执行任务派发412
12.4.4 运行414
12.5 线程间通信概述414
12.5.1 基本概念415
12.5.2 运作机制415
12.5.3 约束限制416
12.6 实战:线程间通信示例416
12.6.1 修改ability_main.xml416
12.6.2 自定义事件处理器417
12.6.3 执行事件发送418
12.6.4 运行420
第13章 视频
13.1 视频概述422
13.2 实战:媒体编解码能力查询422
13.2.1 接口说明422
13.2.2 创建应用422
13.2.3 修改ability_main.xml423
13.2.4 修改MainAbilitySlice423
13.2.5 运行425
13.3 实战:视频编解码425
13.3.1 接口说明425
13.3.2 创建应用426
13.3.3 修改ability_main.xml426
13.3.4 修改MainAbilitySlice427
13.4 实战:视频播放431
13.4.1 接口说明431
13.4.2 创建应用432
13.4.3 修改ability_main.xml432
13.4.4 修改MainAbilitySlice433
13.4.5 运行438
13.5 实战:视频录制438
13.5.1 接口说明438
13.5.2 创建应用439
13.5.3 修改ability_main.xml439
13.5.4 修改MainAbilitySlice440
13.5.5 运行443
13.6 Stage模型的视频开发443
13.6.1 视频开发指导443
13.6.2 视频开发步骤444
13.7 实战:实现Stage模型的视频
播放器447
13.7.1 获取本地视频448
13.7.2 视频播放控制452
13.7.3 创建播放器界面456
13.7.4 运行462
第14章 图像
14.1 图像概述464
14.1.1 基本概念464
14.1.2 约束与限制464
14.2 实战:图像解码和编码464
14.2.1 接口说明464
14.2.2 创建应用465
14.2.3 修改ability_main.xml465
14.2.4 修改MainAbilitySlice467
14.2.5 解码操作说明470
14.2.6 编码操作说明471
14.3 实战:位图操作471
14.3.1 接口说明471
14.3.2 创建应用472
14.3.3 修改ability_main.xml473
14.3.4 修改MainAbilitySlice473
14.3.5 创建PixelMap操作说明475
14.3.6 从位图对象中获取信息操作
说明475
14.3.7 读取和写入像素操作说明476
14.4 实战:图像属性解码477
14.4.1 接口说明477
14.4.2 创建应用477
14.4.3 修改ability_main.xml478
14.4.4 修改MainAbilitySlice478
14.4.5 运行481
14.5 实现Stage模型的图片开发481
14.5.1 图片开发基本概念481
14.5.2 图片开发主要流程482
14.5.3 图片解码482
14.5.4 图像变换484
14.5.5 位图操作486
14.5.6 图片编码487
14.5.7 图片工具488
第15章 网络管理
15.1 网络管理概述491
15.1.1 支持的场景491
15.1.2 约束与限制491
15.2 实战:使用当前网络打开一个URL链接491
15.2.1 接口说明491
15.2.2 创建应用492
15.2.3 声明权限492
15.2.4 修改ability_main.xml492
15.2.5 修改MainAbilitySlice493
15.2.6 运行497
15.3 实战:使用当前网络进行Socket数据传输497
15.3.1 接口说明497
15.3.2 创建应用498
15.3.3 声明权限498
15.3.4 修改ability_main.xml498
15.3.5 修改MainAbilitySlice499
15.3.6 运行503
15.4 实战:流量统计504
15.4.1 接口说明504
15.4.2 创建应用504
15.4.3 声明权限504
15.4.4 修改ability_main.xml505
15.4.5 修改MainAbilitySlice506
15.4.6 运行509
15.5 实战:在Stage模型中通过HTTP请求数据509
15.5.1 准备一个HTTP服务接口510
15.5.2 添加使用Button组件来触发
点击510
15.5.3 发起HTTP请求510
15.5.4 声明权限512
15.5.5 运行512
15.6 Web组件概述512
15.6.1 加载本地网页512
15.6.2 加载在线网页513
15.6.3 加载沙箱路径下的本地资源
文件513
15.6.4 网页缩放514
15.6.5 文本缩放515
15.6.6 Web组件事件515
15.6.7 Web和JavaScript交互515
15.6.8 处理页面导航518
15.7 实战:在Stage模型中通过Web组件
加载在线网页518
15.7.1 准备一个在线网页地址519
15.7.2 声明网络访问权限519
15.7.3 发起HTTP请求520
15.7.4 运行520
第16章 综合案例1:JS实现智能穿戴应用
16.1 案例概述522
16.1.1 传统华容道游戏522
16.1.2 数字华容道游戏522
16.2 代码实现523
16.2.1 技术重点523
16.2.2 整体布局523
16.2.3 整体样式524
16.2.4 游戏核心逻辑525
16.3 应用运行530
第17章 综合案例2:Java实现智慧屏应用
17.1 案例概述532
17.2 代码实现532
17.2.1 技术重点532
17.2.2 创建应用532
17.2.3 设置布局533
17.2.4 设置全屏535
17.2.5 应用的主体逻辑536
17.2.6 初始化视频数据540
17.2.7 播放、暂停视频541
17.3 应用运行544
第18章 综合案例3:Java实现手机应用
18.1 案例概述546
18.1.1 俄罗斯方块游戏概述546
18.1.2 俄罗斯方块游戏规则546
18.2 代码实现546
18.2.1 技术重点547
18.2.2 设置布局547
18.2.3 设置全屏550
18.2.4 应用的主体逻辑551
18.2.5 初始化游戏553
18.2.6 创建网格数据554
18.2.7 绘制网格560
18.2.8 启动游戏562
18.2.9 左移操作564
18.2.10 右移操作565
18.2.11 转换操作567
18.2.12 重置操作570
18.3 应用运行570
第19章 综合案例4:ArkTS实现手机应用
19.1 仿微信应用概述572
19.1.1 “微信”页面572
19.1.2 “联系人”页面572
19.1.3 “发现”页面572
19.1.4 “我”页面573
19.2 实战:“微信”页面573
19.2.1 创建“微信”页面ChatPage573
19.2.2 定义联系人Person574
19.2.3 定义联系人数据574
19.2.4 定义样式575
19.3 实战:“联系人”页面577
19.3.1 创建“联系人”页面ContactPage577
19.3.2 定义样式578
19.4 实战:“发现”页面579
19.4.1 创建“发现”页面DiscoveryPage579
19.4.2 定义样式580
19.5 实战:“我”页面582
19.6 实战:组装所有页面583
19.6.1 将Tabs组件作为导航栏583
19.6.2 使用Swiper组件实现页面
滑动585
附录 本书第1版与第2版的差异对比586
你还可能感兴趣
我要评论
|