正版资源黑马2018最新kotlin项目实战 (手机影音、黑马外卖及时通讯,坦克大战等)视频教程
《黑马2018最新kotlin项目实战 (手机影音、黑马外卖及时通讯,坦克大战等)视频教程》本套视频教程是 黑马2018年最新的kotlin项目实战视频教程 (包含 手机影音、黑马外卖及时通讯,坦克大战等 教程)【技能收获】学完可掌握:Java 后端开发。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工
支付成功后自动发货,可在「我的订单」查看网盘链接;链接失效可联系客服免费补链。
这套资料的主题是 Kotlin 在 Android 上的工程化落地,时间点是 2018 年,正是 Kotlin 被 Google 宣布为 Android 官方一级语言之后的第一波实战教程。它的价值不在于“新”,而在于三个项目覆盖了三种完全不同的技术场景:媒体播放类应用、即时通讯类应用、游戏逻辑类应用。把这三个做完,Kotlin 的语法特性会在不同压力下被反复使用,而不是停留在 Lambda 和空安全的语法演示上。
三个项目分别练什么
手机影音这一类项目,核心是 MediaPlayer 与列表页的配合。用 Kotlin 写的时候,重点会落在数据类的定义、RecyclerView 适配器的简化、以及本地媒体扫描与在线播放两种数据源的切换。这类项目最能体现 Kotlin 相比 Java 在样板代码上的削减——一个 data class 加几行扩展函数,就能替掉原来一大段 getter/setter 和 ViewHolder 的重复逻辑。
黑马外卖这条线偏即时通讯,涉及网络层、消息推送、会话列表与聊天界面的状态同步。这里值得关注的是协程还没成为主流的年代,教程大概率用的是回调加 Handler 或 RxJava 的组合。工程上要看的是:网络请求的封装方式、消息实体的序列化、以及聊天列表的局部刷新策略。这部分对理解 Android 端的异步模型很有帮助,即使后来换成协程,问题结构是一样的。
坦克大战是纯逻辑向的项目,用 Canvas 做绘制、用线程或 Handler 驱动帧循环。它的意义在于把 Kotlin 用在非 UI 密集的场景:碰撞检测、对象池、状态机、方向枚举与 when 表达式。写过一遍之后,对 sealed class 和 when 的配合会有更具体的感受,而不是只知道语法。
资料的结构与使用方式
这类成套视频通常按“环境搭建 → 语言基础 → 单模块实现 → 项目整合”的顺序组织。建议不要从第一集顺播到底,而是先跳到三个项目中任意一个的搭建章节,把工程跑起来,再回头补语法部分。因为 Kotlin 的语法点很少,真正卡人的是 Gradle 配置、依赖版本、以及 2018 年那批 Android API 的调用方式。先跑通再补课,效率比顺序看高得多。
看的过程中建议同步做两件事:一是把每个项目里可复用的部分单独抽出来,比如网络请求封装、BaseActivity、通用适配器,形成自己的小工具集;二是遇到 Java 与 Kotlin 混编的地方,刻意记录互操作时的空安全处理和平台类型问题,这是当年最容易踩坑的地方。
需要提前注意的环境问题
2018 年的 Android 工程放在今天直接打开,大概率会遇到 Gradle 版本、support 库与 AndroidX 的冲突、以及部分 API 废弃的问题。这不是资料本身的问题,而是时间差。处理方式也简单:要么按教程原版本配置一个旧环境,要么在新建工程里手动迁移代码逻辑。后者更推荐,因为迁移的过程本身就是一次理解代码结构的练习——你会被迫判断哪些是业务逻辑,哪些只是当时的框架写法。
Kotlin 版本同样如此。教程里的写法可能还没用到协程、Flow 或 Compose,但这不影响它作为语法与工程结构的参照。把它当作“Kotlin 怎么在真实 Android 项目里被组织”的样本,而不是“最新写法大全”,预期就对了。
适合谁拿出来对照
如果你已经会 Java 写 Android,想找一个完整的 Kotlin 项目来对照改写,这三个项目的体量刚好:不大到劝退,也不小到只够演示语法。如果你是从 Kotlin 语法书过来的,缺的是把语法串成工程的能力,那么按项目拆解、抽出复用模块的过程,比单纯看视频更有用。配合章节笔记做复盘,最后自己重写一遍核心模块,这套资料的作用就发挥出来了。
本套视频教程是 黑马2018年最新的kotlin项目实战视频教程 (包含 手机影音、黑马外卖及时通讯,坦克大战等 教程)
课程推荐
《黑马2018最新kotlin项目实战 (手机影音、黑马外卖及时通讯,坦克大战等)视频教程》本套视频教程是 黑马2018年最新的kotlin项目实战视频教程 (包含 手机影音、黑马外卖及时通讯,坦克大战等 教程)【技能收获】学完可掌握:Java 后端开发。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。
视频目录(639 节)
* │ 01_kotlin课程简介_01.mp4
* │ 02_kotlin学习方法_01.mp4
* │ 03_kotlin选好教练车_01.mp4
* │ 03_kotlin选好教练车_02.mp4
* │ 04_kotlin你好世界_01.mp4
* │ 05_kotlin变量与输出_01.mp4
* │ 05_kotlin变量与输出_02.mp4
* │ 38_kotlin面向对象-抽象类和接口_01.mp4
* │ 38_kotlin面向对象-抽象类和接口_02.mp4
* │ 38_kotlin面向对象-抽象类和接口_03.mp4
* │ 38_kotlin面向对象-抽象类和接口_04.mp4
* │ 39_kotlin面向对象-代理和委托_01.mp4
* │ 39_kotlin面向对象-代理和委托_02.mp4
* │ 40_kotlin面向对象-单例模式_01.mp4
* │ 41_kotlin面向对象-枚举_01.mp4
* │ 42_kotlin面向对象-印章类_01.mp4
* │ 42_kotlin面向对象-印章类_02.mp4
* │ 43_kotlin课程计划_01.mp4
* │ 45_kotlin函数式编程入门_01.mp4
* │ 46_kotlin图片处理_01.mp4
* │ 46_kotlin图片处理_02.mp4
* │ 48_kotlin高阶函数实战(传统函数演示)_01.mp4
* │ 48_kotlin高阶函数实战(传统函数演示)_02.mp4
* │ 49_kotlin高阶函数实战(传统需求实现的缺点)_01.mp4
* │ 49_kotlin高阶函数实战(传统需求实现的缺点)_02.mp4
* │ 50_kotlin高阶函数实战(map,filter,groupBy,minBy,maxBy,find,an_01.mp4
* │ 50_kotlin高阶函数实战(map,filter,groupBy,minBy,maxBy,find,an_02.mp4
* │ 50_kotlin高阶函数实战(map,filter,groupBy,minBy,maxBy,find,an_03.mp4
* │ 51_kotlin高阶函数实战-自定义dsl入门_01.mp4
* │ 01_程序猿中的原始人_01.mp4
* │ 02_gradle简单介绍_01.mp4
* │ 03_gradle入门演示_01.mp4
* │ 03_gradle入门演示_02.mp4
* │ 04_java代码和kotlin代码共存_01.mp4
* │ 04_java代码和kotlin代码共存_02.mp4
* │ 05_gradle的灵魂project和task_01.mp4
* │ 01_gradle的依赖管理.mp4
* │ 02_gradle任务的生命周期.mp4
* │ 03_gradle任务集,默认属性和默认任务.mp4
* │ 04_编写gradle增量式更新任务,效率是maven的100倍_01.mp4
* │ 04_编写gradle增量式更新任务,效率是maven的100倍_02.mp4
* │ 05_gradle常见插件application,java,war_01.mp4
* │ 01_gradle依赖管理入门(普通程序员的开发流程)_01.mp4
* │ 01_gradle依赖管理入门(普通程序员的开发流程)_02.mp4
* │ 01_gradle依赖管理入门(普通程序员的开发流程)_03.mp4
* │ 02_gradle依赖管理(高级程序员如何添加依赖)_01.mp4
* │ 02_gradle依赖管理(高级程序员如何添加依赖)_02.mp4
* │ 03_gradle依赖管理的类比_01.mp4
* │ 04_公共仓库和依赖配置阶段_01.mp4
* │ 05_gradle依赖冲突的解决_01.mp4
* │ 01_gradle插件自定义扩展_01.mp4
* │ 02_gradle插件自定义扩展_02.mp4
* │ 02_gradle调用外部扩展_01.mp4
* │ 03_gradle的学习方法_01.mp4
* │ 01_介绍_x1.1_01.mp4
* │ 02_项目搭建_x1.1_01.mp4
* │ 02_项目搭建_x1.1_02.mp4
* │ 03_窗体回调的介绍_x1.1_01.mp4
* │ 04_游戏中坐标,图像,声音,交互_x1.1_01.mp4
* │ 05_游戏中窗体的创建_x1.1_01.mp4
* │ 05_游戏中窗体的创建_x1.1_02.mp4
* │ 06_面向对象构建模型_x1.1_01.mp4
* │ 06_面向对象构建模型_x1.1_02.mp4
* │ 07_坦克大战中地图绘制_x1.1_01.mp4
* │ 07_坦克大战中地图绘制_x1.1_02.mp4
* │ 08_我方坦克绘制_x1.1_01.mp4
* │ 08_我方坦克绘制_x1.1_02.mp4
* │ 08_我方坦克绘制_x1.1_03.mp4
* │ 09_我方坦克的移动_x1.1_01.mp4
* │ 09_我方坦克的移动_x1.1_02.mp4
* │ 10_移动碰撞检测业务逻辑分析实现-01_x1.1_01.mp4
* │ 10_移动碰撞检测业务逻辑分析实现-01_x1.1_02.mp4
* │ 10_移动碰撞检测业务逻辑分析实现-01_x1.1_03.mp4
* │ 11_移动碰撞检测业务逻辑分析实现-02_x1.1_01.mp4
* │ 11_移动碰撞检测业务逻辑分析实现-02_x1.1_02.mp4
* │ 12_移动碰撞检测业务逻辑分析实现-03_x1.1_01.mp4
* │ 12_移动碰撞检测业务逻辑分析实现-03_x1.1_02.mp4
* │ 12_移动碰撞检测业务逻辑分析实现-03_x1.1_03.mp4
* │ 13_结构介绍_x1.1_01.mp4
* │ 14_子弹显示_x1.1_01.mp4
* │ 15_闭包计算子弹的位置_x1.1_01.mp4
* │ 15_闭包计算子弹的位置_x1.1_02.mp4
* │ 15_闭包计算子弹的位置_x1.1_03.mp4
* │ 15_闭包计算子弹的位置_x1.1_04.mp4
* │ 06_kotlin二进制基础_01.mp4
* │ 07_kotlin变量和常量&类型推断_01.mp4
* │ 08_kotlin变量取值范围_01.mp4
* │ 16_子弹方向计算和子弹飞行_x1.1_01.mp4
* │ 16_子弹方向计算和子弹飞行_x1.1_02.mp4
* │ 16_子弹方向计算和子弹飞行_x1.1_03.mp4
* │ 17_界面中元素的回收_x1.1_01.mp4
* │ 17_界面中元素的回收_x1.1_02.mp4
* │ 18_攻与受业务逻辑分析_x1.1_01.mp4
* │ 19_攻与受业务逻辑分析实现-02_x1.1_01.mp4
* │ 19_攻与受业务逻辑分析实现-02_x1.1_02.mp4
* │ 20_攻与受业务逻辑分析实现-03_x1.1_01.mp4
* │ 21_爆炸物的显示_x1.1_01.mp4
* │ 21_爆炸物的显示_x1.1_02.mp4
* │ 22_敌方坦克绘制_x1.1_01.mp4
* │ 23_敌方坦克的自动移动_x1.1_01.mp4
* │ 23_敌方坦克的自动移动_x1.1_02.mp4
* │ 23_敌方坦克的自动移动_x1.1_03.mp4
* │ 24_敌方坦克的自动发射子弹_x1.1_01.mp4
* │ 25_双方坦克相互伤害_x1.1_01.mp4
* │ 25_双方坦克相互伤害_x1.1_02.mp4
* │ 26_大本营的绘制_x1.1_01.mp4
* │ 27_大本营特性的实现_x1.1_01.mp4
* │ 27_大本营特性的实现_x1.1_02.mp4
* │ 28_游戏中细节的修复_x1.1_01.mp4
* │ 29_我方游戏结束的实现_x1.1_01.mp4
* │ 29_我方游戏结束的实现_x1.1_02.mp4
* │ 30_敌方游戏结束的实现_x1.1_01.mp4
* │ 30_敌方游戏结束的实现_x1.1_02.mp4
* │ 31_gradle打包游戏_x1.1_01.mp4
* │ 31_gradle打包游戏_x1.1_02.mp4
* │ 31_gradle打包游戏_x1.1_03.mp4
* │ 01.课程介绍_01.mp4
* │ 02.ascii编码_01.mp4
* │ 03.凯撒加密算法_01.mp4
* │ 03.凯撒加密算法_02.mp4
* │ 04.频度分析法破解凯撒加密算_01.mp4
* │ 05.Byte和bit_01.mp4
* │ 06.常见对称加密算法介绍_01.mp4
* │ 07.DES加密和解密_01.mp4
* │ 07.DES加密和解密_02.mp4
* │ 08.Base64编码和解_01.mp4
* │ 09.AES加密和解密_01.mp4
* │ 09.AES加密和解密_02.mp4
* │ 10.DES和AES秘钥长度详解_01.mp4
* │ 11.工作模式填充模式_01.mp4
* │ 12.填充模式工作模式使用_01.mp4
* │ 13.对称加密应用实战_01.mp4
* │ 13.对称加密应用实战_02.mp4
* │ 14.非对称加密介绍_01.mp4
* │ 15.非对称加密RSA-生成秘钥对_01.mp4
* │ 16.非对称加密RSA-加密_01.mp4
* │ 17.非对称加密RSA-分段加密_01.mp4
* │ 17.非对称加密RSA-分段加密_02.mp4
* │ 18.非对称加密RSA-分段解密_01.mp4
* │ 19.RSA保存秘钥对_01.mp4
* │ 20.总结RSA特点_01.mp4
* │ 21.消息摘要介绍_01.mp4
* │ 22.消息摘要md5_01.mp4
* │ 23.消息摘要sha1和sha256_01.mp4
* │ 24.消息摘要应用实战_01.mp4
* │ 25.数字签名_01.mp4
* │ 25.数字签名_02.mp4
* │ 26.数字签名流程图分析_01.mp4
* │ 27.加密算法总结_01.mp4
* │ 09_kotlin函数入门_01.mp4
* │ 10_kotlin语言boolean_01.mp4
* │ 11_kotlin命令行交互式终端_01.mp4
* │ 12_kotlin函数加强_01.mp4
* │ 12_kotlin函数加强_02.mp4
* │ 13_kotlin函数作业讲解_01.mp4
* │ 01.课程介绍_01.mp4
* │ 02.Kotlin配置_01.mp4
* │ 03.增量更新的集成_01.mp4
* │ 04.生成头条patch包_01.mp4
* │ 05.更新今日头条完成_01.mp4
* │ 01.课程介绍_01.mp4
* │ 02.集成阿里热修复框架AndFix_01.mp4
* │ 03.热修复完成_01.mp4
* │ 04.热修复的不足_01.mp4
* │ 01.课程介绍及APP效果展示_01.mp4
* │ 02.Kotlin配置_01.mp4
* │ 03.支付宝开发者平台SDKDemo运行_01.mp4
* │ 04.支付宝支付秘钥配_01.mp4
* │ 05.第三方支付四部曲分析_01.mp4
* │ 06.真机访问本地服务_01.mp4
* │ 07.支付宝支付前2步_01.mp4
* │ 08.支付宝支付集成SDK_01.mp4
* │ 09.支付宝支付第3步_01.mp4
* │ 10.支付宝支付第4步_01.mp4
* │ 11.同步返回异步通知_01.mp4
* │ 01.课程介绍_01.mp4
* │ 02.Kotlin配置_01.mp4
* │ 03.WebView初始化_01.mp4
* │ 04.Kotlin与H5通信方式一(H5主动)_01.mp4
* │ 04.Kotlin与H5通信方式一(H5主动)_02.mp4
* │ 05.Kotlin与H5通信方式二(Kotlin主动)_01.mp4
* │ 06.Kotlin与H5通信方式三(callback)_01.mp4
* │ 06.Kotlin与H5通信方式三(callback)_02.mp4
* │ 06.Kotlin与H5通信方式三(callback)_03.mp4
* │ 07.H5回调kotlin获取酒店数据_01.mp4
* │ 08.H5在线模板刷新数据_01.mp4
* │ 09.kotlin仿QQ底部弹出Dialog_01.mp4
* │ 09.kotlin仿QQ底部弹出Dialog_02.mp4
* │ 10.查看系统源码-调用系统拨号功能_01.mp4
* │ 10.查看系统源码-调用系统拨号功能_02.mp4
* │ 11.本地模板打包上线_01.mp4
* │ 01.课程介绍及APP效果展示_01.mp4
* │ 02.kotlin配置_01.mp4
* │ 03.https服务器配置与keystore生成_01.mp4
* │ 03.https服务器配置与keystore生成_02.mp4
* │ 04.https客户端编设置信任管理_01.mp4
* │ 04.https客户端编设置信任管理_02.mp4
* │ 05.https客户端编生成证书_01.mp4
* │ 06.https编程总结_01.mp4
* │ 00.手机影音项目介绍_01.mp4
* │ 01.项目准备_01.mp4
* │ 02.基类抽取_01.mp4
* │ 03.欢迎界面_01.mp4
* │ 04.抽取startactivityandfinish_01.mp4
* │ 05.主界面布局_01.mp4
* │ 06.toolbar处理_01.mp4
* │ 07.设置菜单点击事件处理_01.mp4
* │ 08.设置界面处理_01.mp4
* │ 08.设置界面处理_02.mp4
* │ 09.主界面tab切换_01.mp4
* │ 09.主界面tab切换_02.mp4
* │ 10.home界面适配_01.mp4
* │ 10.home界面适配_02.mp4
* │ 10.home界面适配_03.mp4
* │ 11.获取首页网络数据_01.mp4
* │ 12.解析数据刷新列表_01.mp4
* │ 13.列表条目view更新_01.mp4
* │ 14.首页下拉刷新处理_01.mp4
* │ 15.上拉加载更多_01.mp4
* │ 15.上拉加载更多_02.mp4
* │ 14_kotlin字符串模版_01.mp4
* │ 15_kotlin条件控制if和else_01.mp4
* │ 16_kotlin字符串比较_01.mp4
* │ 17_kotlin空值处理_01.mp4
* │ 18_kotlin的when表达式_01.mp4
* │ 18_kotlin的when表达式_02.mp4
* │ 16.首页mvp重构_01.mp4
* │ 16.首页mvp重构_02.mp4
* │ 17.网络框架的封_01.mp4
* │ 17.网络框架的封_02.mp4
* │ 18.通过封装的网络框架加载首页数据_01.mp4
* │ 18.通过封装的网络框架加载首页数据_02.mp4
* │ 19.home界面总结以及view解绑_01.mp4
* │ 20.悦单条目自定义及界面适配_01.mp4
* │ 21.加载悦单列表数据刷新列表_01.mp4
* │ 21.加载悦单列表数据刷新列表_02.mp4
* │ 22.悦单条目view初始化_01.mp4
* │ 22.悦单条目view初始化_02.mp4
* │ 23.悦单界面下拉刷新和上拉加载更多_01.mp4
* │ 23.悦单界面下拉刷新和上拉加载更多_02.mp4
* │ 24.基类抽取思路_01.mp4
* │ 25.抽取view以及presenter和adapter的基类_01.mp4
* │ 25.抽取view以及presenter和adapter的基类_02.mp4
* │ 26.实现BaseListFragment的抽取_01.mp4
* │ 26.实现BaseListFragment的抽取_02.mp4
* │ 27.加载mv界面区域数据_01.mp4
* │ 28.mv界面viewpager适配_01.mp4
* │ 28.mv界面viewpager适配_02.mp4
* │ 29.tablayout适配_01.mp4
* │ 30.mv每一个界面显示准备_01.mp4
* │ 30.mv每一个界面显示准备_02.mp4
* │ 31.mv每一个界面列表显示_01.mp4
* │ 31.mv每一个界面列表显示_02.mp4
* │ 32.mv列表条目view控件初始化_01.mp4
* │ 33.通过kotlin函数回调处理mv界面条目点击事件_01.mp4
* │ 33.通过kotlin函数回调处理mv界面条目点击事件_02.mp4
* │ 34.条目点击跳转到播放界面_01.mp4
* │ 35.mediaplaer生命周期回顾_01.mp4
* │ 36.通过TextureView进行视频播放_01.mp4
* │ 36.通过TextureView进行视频播放_02.mp4
* │ 37.集成vitamio播放框架_01.mp4
* │ 37.集成vitamio播放框架_02.mp4
* │ 38.ijkplayer集成_01.mp4
* │ 38.ijkplayer集成_02.mp4
* │ 39.节操播放器集成_01.mp4
* │ 40.响应应用外视频播放请求_01.mp4
* │ 40.响应应用外视频播放请求_02.mp4
* │ 41.视频播放界面其他功能_01.mp4
* │ 42.视频功能总结_01.mp4
* │ 43.通过MediaProvider获取音乐列表数据_01.mp4
* │ 43.通过MediaProvider获取音乐列表数据_02.mp4
* │ 43.通过MediaProvider获取音乐列表数据_03.mp4
* │ 44.异步查询音乐数据_01.mp4
* │ 45.通过AsyncQueryHandler异步查询音乐列表_01.mp4
* │ 46.条目view自定义和CursorAdapter简介_01.mp4
* │ 47.v榜界面列表适配_01.mp4
* │ 47.v榜界面列表适配_02.mp4
* │ 47.v榜界面列表适配_03.mp4
* │ 48.cursor关闭和总结_01.mp4
* │ 49.android6.0动态权限申请_01.mp4
* │ 49.android6.0动态权限申请_02.mp4
* │ 50.点击音乐列表条目跳转到音乐播放界面_01.mp4
* │ 50.点击音乐列表条目跳转到音乐播放界面_02.mp4
* │ 51.音乐播放界面布局及音乐播放_01.mp4
* │ 52.service生命周期回顾_01.mp4
* │ 52.service生命周期回顾_02.mp4
* │ 53.开启service播放音乐_01.mp4
* │ 53.开启service播放音乐_02.mp4
* │ 53.开启service播放音乐_03.mp4
* │ 54.创建intent的第二种方式_01.mp4
* │ 55.onStartCommand返回值处理_01.mp4
* │ 56.播放状态按钮处理_01.mp4
* │ 57.通过EventBus通知界面更新_01.mp4
* │ 57.通过EventBus通知界面更新_02.mp4
* │ 58.歌曲名和歌手名更新_01.mp4
* │ 59.播放动画处理_01.mp4
* │ 60.进度更新_01.mp4
* │ 60.进度更新_02.mp4
* │ 60.进度更新_03.mp4
* │ 61.进度条更新和handler内存泄漏处理_01.mp4
* │ 62.拖动进度条更新进度_01.mp4
* │ 63.播放完成自动播放下一曲_01.mp4
* │ 64.切换播放模式_01.mp4
* │ 65.播放模式更新和保存_01.mp4
* │ 19_kotlin的loop和Range_01.mp4
* │ 20_kotlin的list和map入门_01.mp4
* │ 66.上一曲和下一曲_01.mp4
* │ 67.切换歌曲多个歌曲同时播放问题解决_01.mp4
* │ 68.再次播放同一首歌曲处理_01.mp4
* │ 68.再次播放同一首歌曲处理_02.mp4
* │ 69.显示列表popwindow_01.mp4
* │ 69.显示列表popwindow_02.mp4
* │ 70.列表popwindow焦点和返回按钮事件处理_01.mp4
* │ 71.弹出播放列表适配及条目点击事件处理_01.mp4
* │ 71.弹出播放列表适配及条目点击事件处理_02.mp4
* │ 71.弹出播放列表适配及条目点击事件处理_03.mp4
* │ 72.播放列表popwindow弹出和隐藏的动画_01.mp4
* │ 73.播放列表显示和隐藏背景处理_01.mp4
* │ 74.创建Notification_01.mp4
* │ 75.通知栏点击事件处理_01.mp4
* │ 76.自定义通知_01.mp4
* │ 77.notification创建流程总结_01.mp4
* │ 78.播放音乐显示通知_01.mp4
* │ 79.通知栏主体点击处理_01.mp4
* │ 79.通知栏主体点击处理_02.mp4
* │ 80.通知栏上一曲和下一曲以及状态更新按钮点击事件_01.mp4
* │ 81.歌词自定义思路_01.mp4
* │ 82.单行居中文本绘制_01.mp4
* │ 82.单行居中文本绘制_02.mp4
* │ 83.设置字体颜色和大小以及确定文本x位置的第二种方式_01.mp4
* │ 84.多行居中歌词绘制思路_01.mp4
* │ 85.多行歌词绘制_01.mp4
* │ 85.多行歌词绘制_02.mp4
* │ 86.歌词播放思路_01.mp4
* │ 87.歌词播放_01.mp4
* │ 88.歌词滚动思路_01.mp4
* │ 89.歌词滚动_01.mp4
* │ 90.歌词绘制总结_01.mp4
* │ 91.歌词解析_01.mp4
* │ 91.歌词解析_02.mp4
* │ 91.歌词解析_03.mp4
* │ 92.歌词文件加载util类_01.mp4
* │ 93.LyricView中实现歌词解析_01.mp4
* │ 94.手势调节歌词-手指按下和松开处理_01.mp4
* │ 95.手指拖动歌词移动_01.mp4
* │ 96.居中行重新确定_01.mp4
* │ 97.居中行重新确定存在的问题解决_01.mp4
* │ 97.居中行重新确定存在的问题解决_02.mp4
* │ 98.拖动歌词更新进度_01.mp4
* │ 01-即时通讯项目介绍_01.mp4
* │ 02-IM介绍_01.mp4
* │ 03-MVC、MVP和MVVM_01.mp4
* │ 04-版本配置_01.mp4
* │ 05-资源拷贝_01.mp4
* │ 06-基类的创建_01.mp4
* │ 07-Git版本控制_01.mp4
* │ 08-Splash界面布局_01.mp4
* │ 09-Splash界面MVP协议_01.mp4
* │ 10-Splash界面View层的实现_01.mp4
* │ 11-Splash界面Presenter层的实现_01.mp4
* │ 12-Splash界面Model层的实现_01.mp4
* │ 12-Splash界面Model层的实现_02.mp4
* │ 13-登陆界面布局_01.mp4
* │ 14-登陆界面MVP协议_01.mp4
* │ 15-登陆界面View层的实现_01.mp4
* │ 21_kotlin函数和函数式表达式_01.mp4
* │ 22_kotlin默认参数和具名参数_01.mp4
* │ 22_kotlin默认参数和具名参数_02.mp4
* │ 23_kotlin字符串和数字之间的转换_01.mp4
* │ 24_kotlin人机交互_01.mp4
* │ 25_kotlin异常处理_01.mp4
* │ 16-登陆界面Presenter层实现_01.mp4
* │ 16-登陆界面Presenter层实现_02.mp4
* │ 17-登陆界面Model层实现_01.mp4
* │ 18-隐藏软件盘_01.mp4
* │ 19-动态权限申请_01.mp4
* │ 20-注册界面布局_01.mp4
* │ 21-注册界面MVP协议_01.mp4
* │ 22-注册界面View层的实现_01.mp4
* │ 23-注册界面Presenter层的实现_01.mp4
* │ 24-注册流程分析_01.mp4
* │ 25-Bmob的集成_01.mp4
* │ 26-注册到Bmob_01.mp4
* │ 27-注册到环信_01.mp4
* │ 28-用户名已注册处理_01.mp4
* │ 29-主界面布局以及包重构_01.mp4
* │ 30-Fragment的切换_01.mp4
* │ 30-Fragment的切换_02.mp4
* │ 31-动态界面的布局_01.mp4
* │ 32-退出登录的实现_01.mp4
* │ 33-联系人布局的初始化_01.mp4
* │ 34-联系人列表条目的布局_01.mp4
* │ 35-联系人RecyclerView的初始化_01.mp4
* │ 36-联系人界面MVP协议_01.mp4
* │ 37-联系人界面View层的实现_01.mp4
* │ 38-联系人界面Presenter层和Model层的实现_01.mp4
* │ 39-联系人列表的刷新_01.mp4
* │ 40-联系人列表是否显示首字符_01.mp4
* │ 41-点击联系人跳转到聊天界面_01.mp4
* │ 42-长按弹出删除好友的对话框_01.mp4
* │ 43-删除好友_01.mp4
* │ 44-删除好友后刷新联系人列表_01.mp4
* │ 45-SlideBar的绘制_01.mp4
* │ 45-SlideBar的绘制_02.mp4
* │ 46-绘制居中文本_01.mp4
* │ 47-SlideBar背景的处理_01.mp4
* │ 48-点击SlideBar获取字母_01.mp4
* │ 49-SlideBar的接口回调_01.mp4
* │ 50-RecyclerView跟随滚动_01.mp4
* │ 51-添加好友界面布局实现_01.mp4
* │ 52-添加好友界面RecyclerView布局实现_01.mp4
* │ 53-添加好友界面MVP协议_01.mp4
* │ 54-添加好友界面View层的实现_01.mp4
* │ 55-添加好友界面Presenter层实现_01.mp4
* │ 56-添加好友界面Model层实现_01.mp4
* │ 57-添加好友界面RecyclerView的刷新_01.mp4
* │ 58-数据库表的创建_01.mp4
* │ 59-DatabaseHelper的创建_01.mp4
* │ 60-联系人实体类的创建_01.mp4
* │ 61-保存联系人到数据库_01.mp4
* │ 62-查询所有的联系人_01.mp4
* │ 63-删除所有的联系人_01.mp4
* │ 64-是否添加过好友的判断_01.mp4
* │ 65-发送好友请求的过程_01.mp4
* │ 26_kotlin递归_01.mp4
* │ 26_kotlin递归_02.mp4
* │ 27_kotlin尾递归优化_01.mp4
* │ 27_kotlin尾递归优化_02.mp4
* │ 66-发送添加好友的请求_01.mp4
* │ 67-添加好友成功后联系人列表的刷新_01.mp4
* │ 68-联系人界面代码的抽取_01.mp4
* │ 69-聊天界面布局的初始化_01.mp4
* │ 70-收发消息的布局实现_01.mp4
* │ 71-发送一条消息的MVP协议_01.mp4
* │ 72-发送一条消息View层实现_01.mp4
* │ 73-发送一条消息Presenter层实现_01.mp4
* │ 74-发送一条消息Model层实现_01.mp4
* │ 75-MessageListAdapter的创建_01.mp4
* │ 76-发送消息的刷新_01.mp4
* │ 77-接受一条消息的实现_01.mp4
* │ 78-接受一条消息的布局刷新_01.mp4
* │ 79-收发消息后滚动到底部_01.mp4
* │ 80-消息时间间隔过长不显示时间戳_01.mp4
* │ 81-初始化聊天记录_01.mp4
* │ 82-加载更多聊天记录_01.mp4
* │ 83-会话界面布局_01.mp4
* │ 84-会话界面RecyclerView的布局实现_01.mp4
* │ 85-会话界面数据加载_01.mp4
* │ 86-会话界面列表的刷新_01.mp4
* │ 87-收到消息后刷新会话列表_01.mp4
* │ 88-会话列表点击跳转到聊天界面_01.mp4
* │ 89-底部导航条未读消息的更新_01.mp4
* │ 90-在Application类中监听消息.mp4
* │ 91-判断App是否在前台_01.mp4
* │ 92-收到消息后播放音效_01.mp4
* │ 93-后台收到消息后弹出通知_01.mp4
* │ 94-点击通知进入聊天界面_01.mp4
* │ 95-TaskStackBuilder的使用_01.mp4
* │ 96-多设备登陆处理_01.mp4
* │ 1.创建工程_01.mp4
* │ 10.适配图片_01.mp4
* │ 2.整体布局_01.mp4
* │ 3.底部选项卡_01.mp4
* │ 3.底部选项卡_02.mp4
* │ 4.fragment切换_01.mp4
* │ 5.侵入状态栏效果以及虚拟按键处理_01.mp4
* │ 5.侵入状态栏效果以及虚拟按键处理_02.mp4
* │ 6.扩展函数的使用_01.mp4
* │ 7.列表视图的实现_01.mp4
* │ 7.列表视图的实现_02.mp4
* │ 8.多类型条目的支持_01.mp4
* │ 9.挂载真实布局_01.mp4
* │ 9.挂载真实布局_02.mp4
* │ 11.颜色渐变的计算_01.mp4
* │ 12.首页接口校验_01.mp4
* │ 12.首页接口校验_02.mp4
* │ 13.MVP的分析以及整体编码_01.mp4
* │ 13.MVP的分析以及整体编码_02.mp4
* │ 14.Retrofit的配置_01.mp4
* │ 14.Retrofit的配置_02.mp4
* │ 15.Retrofit的请求数据_01.mp4
* │ 16.解析首页数据_01.mp4
* │ 17.展示首页数据_01.mp4
* │ 18.使用dagger2解耦view和Presenter_01.mp4
* │ 18.使用dagger2解耦view和Presenter_02.mp4
* │ 19.dagger2原理分析_01.mp4
* │ 20.首页商家item赋值_01.mp4
* │ 20.首页商家item赋值_02.mp4
* │ 1.用户中心页面跳转_01.mp4
* │ 10.ORM处理user_01.mp4
* │ 10.ORM处理user_02.mp4
* │ 2.短信安全原理_01.mp4
* │ 3.配置短信验证环境_01.mp4
* │ 4.获取验证码的实现_01.mp4
* │ 5.提交验证码的实现_01.mp4
* │ 6.验证码倒计时效果_01.mp4
* │ 6.验证码倒计时效果_02.mp4
* │ 7.登录页面校验_01.mp4
* │ 8.网络请求的封装_01.mp4
* │ 9.解析数据和登录后刷新UI_01.mp4
* │ 9.解析数据和登录后刷新UI_02.mp4
* │ 11.ORMlite的基本使用_01.mp4
* │ 11.ORMlite的基本使用_02.mp4
* │ 12.新老用户区分统计_01.mp4
* │ 12.新老用户区分统计_02.mp4
* │ 13.Ormlite事务处理_01.mp4
* │ 13.Ormlite事务处理_02.mp4
* │ 14.订单界面以及接口校验_01.mp4
* │ 15.获取订单列表_01.mp4
* │ 15.获取订单列表_02.mp4
* │ 16.展示订单数据_01.mp4
* │ 16.展示订单数据_02.mp4
* │ 17.下拉刷新_01.mp4
* │ 17.下拉刷新_02.mp4
* │ 18.订单需求详细分析_01.mp4
* │ 19.极光推送环境配置_01.mp4
* │ 19.极光推送环境配置_02.mp4
* │ 20.推送实现以及控制台_01.mp4
* │ 28_kotlin新的篇章idea使用入门_01.mp4
* │ 29_kotlin面向对象入门_01.mp4
* │ 29_kotlin面向对象入门_02.mp4
* │ 30_kotlin静态属性和动态行为_01.mp4
* │ 31_kotlin面向对象_01.mp4
* │ 32_kotlin面向对象实战-洗衣机_01.mp4
* │ 21.自定义消息的消息内容与附加字段_01.mp4
* │ 22.图解观察者模式_01.mp4
* │ 22.图解观察者模式_02.mp4
* │ 23.观察者实现的三个步骤_01.mp4
* │ 24.订单自动刷新_01.mp4
* │ 25.Rxjava与Retrofit连用_01.mp4
* │ 25.Rxjava与Retrofit连用_02.mp4
* │ 1.挂载详情页布局_01.mp4
* │ 1.挂载详情页布局_02.mp4
* │ 10.点击左侧后跳转到该类别第一个商品_01.mp4
* │ 2.展示详情页fragment与V13包的引入_01.mp4
* │ 2.展示详情页fragment与V13包的引入_02.mp4
* │ 3.指示器与数据接口测试_01.mp4
* │ 4.获取商品类别_01.mp4
* │ 4.获取商品类别_02.mp4
* │ 5.左侧商品类别列表的实现_01.mp4
* │ 5.左侧商品类别列表的实现_02.mp4
* │ 6.替换SDK版本导入源码找到形参解决R文件找不到_01.mp4
* │ 6.替换SDK版本导入源码找到形参解决R文件找不到_02.mp4
* │ 6.替换SDK版本导入源码找到形参解决R文件找不到_03.mp4
* │ 7.右侧所有商品列表的实现_01.mp4
* │ 7.右侧所有商品列表的实现_02.mp4
* │ 8.两侧列表的数据双向绑定_01.mp4
* │ 8.两侧列表的数据双向绑定_02.mp4
* │ 8.两侧列表的数据双向绑定_03.mp4
* │ 9.左侧列表点选效果_01.mp4
* │ 11.右侧列表滚动切换左侧类别_01.mp4
* │ 11.右侧列表滚动切换左侧类别_02.mp4
* │ 12.商品条目的赋值_01.mp4
* │ 12.商品条目的赋值_02.mp4
* │ 13.点击数量发生变化_01.mp4
* │ 14.点击+号的动画_01.mp4
* │ 15.减号按钮的处理_01.mp4
* │ 16.红点功能的实现_01.mp4
* │ 17.获取view的绝对位置方法_01.mp4
* │ 18.抛物线动画实现_01.mp4
* │ 18.抛物线动画实现_02.mp4
* │ 18.抛物线动画实现_03.mp4
* │ 1.更新底部购物栏UI_01.mp4
* │ 10.缓存保存的实现_01.mp4
* │ 2.弹出购物车_01.mp4
* │ 3.展示购物车_01.mp4
* │ 3.展示购物车_02.mp4
* │ 4.购物车+号处理_01.mp4
* │ 5.购物车-号处理_01.mp4
* │ 5.购物车-号处理_02.mp4
* │ 6.清空购物车_01.mp4
* │ 6.清空购物车_02.mp4
* │ 7.使用dataclass创建点餐记录javabean_01.mp4
* │ 8.点餐记录dao层实现_01.mp4
* │ 9.缓存读取的实现_01.mp4
* │ 9.缓存读取的实现_02.mp4
* │ 9.缓存读取的实现_03.mp4
* │ 11.清空缓存的实现_01.mp4
* │ 12.跳转到确认地址页面_01.mp4
* │ 12.跳转到确认地址页面_02.mp4
* │ 13.地址列表与新增地址页面_01.mp4
* │ 13.地址列表与新增地址页面_02.mp4
* │ 14.新增地址页面控件处理_01.mp4
* │ 14.新增地址页面控件处理_02.mp4
* │ 15.地址bean的orm处理_01.mp4
* │ 16.地址dao的封装_01.mp4
* │ 16.地址dao的封装_02.mp4
* │ 17.新增地址_01.mp4
* │ 17.新增地址_02.mp4
* │ 18.地址列表_01.mp4
* │ 18.地址列表_02.mp4
* │ 18.地址列表_03.mp4
* │ 19.更新地址_01.mp4
* │ 19.更新地址_02.mp4
* │ 19.更新地址_03.mp4
* │ 20.删除地址_01.mp4
* │ 1.集成高德地图_01.mp4
* │ 1.集成高德地图_02.mp4
* │ 10.更新骑手位置_01.mp4
* │ 2.生成高德地图key_01.mp4
* │ 3.定位实现以及动态申请权限_01.mp4
* │ 3.定位实现以及动态申请权限_02.mp4
* │ 4.移动地图与周边搜索_01.mp4
* │ 4.移动地图与周边搜索_02.mp4
* │ 4.移动地图与周边搜索_03.mp4
* │ 5.展示周边搜索结果_01.mp4
* │ 5.展示周边搜索结果_02.mp4
* │ 6.一键定位地址的实现_01.mp4
* │ 7.订单详情页_01.mp4
* │ 7.订单详情页_02.mp4
* │ 8.订单详情页自动刷新_01.mp4
* │ 9.标注买卖家位置_01.mp4
* │ 9.标注买卖家位置_02.mp4
* │ 9.标注买卖家位置_03.mp4
* │ 11.动态更新骑手位置以及绘制轨迹_01.mp4
* │ 11.动态更新骑手位置以及绘制轨迹_02.mp4
* │ 12.地图测距功能_01.mp4
* │ 01.课程介绍_01.mp4
* │ 02.创建项目与配置_01.mp4
* │ 03.页面初始化_01.mp4
* │ 04.canvas绘制线条_01.mp4
* │ 05.canvas绘制圆形_01.mp4
* │ 06.canvas填充和状态_01.mp4
* │ 07.绘制时钟外边框_01.mp4
* │ 08.绘制时钟60个小点_01.mp4
* │ 09.绘制时钟12个小时_01.mp4
* │ 09.绘制时钟12个小时_02.mp4
* │ 10.绘制时针线_01.mp4
* │ 11.绘制分针和秒针_01.mp4
* │ 12.绘制时钟获取当前时间_01.mp4
* │ 13.绘制时钟优化_01.mp4
* │ 33_kotlin面向对象实战-洗衣机升级_01.mp4
* │ 33_kotlin面向对象实战-洗衣机升级_02.mp4
* │ 34_kotlin面向对象实战-封装_01.mp4
* │ 35_kotlin面向对象-继承(open和override)_01.mp4
* │ 36_kotlin抽象类和继承_01.mp4
* │ 36_kotlin抽象类和继承_02.mp4
* │ 37_kotlin面向对象-多态_01.mp4
* 非对称加密RSA-生成秘钥对.mp4




