kaixue.io: Kotlin 和 Jetpack 的上手指南

如果你看不到上面的视频,可以点击 这里 去腾讯视频或者点击 这里 去 YouTube 看原视频。 大家好,我是扔物线。 距离上一次 HenCoder 视频到现在,已经又是三个月的时间了。不过,这一次我不是要推出新一期的 HenCoder 视频或者文章,而是要向大家推荐一个更紧急的新项目:kaixue.io。 这一年多来我一直在做 HenCoder,专注的是高级 Android 工程师的基础部分的技术,比如大家看到最多的是自定义 View,另外前段时间开始了 HTTP 方面的。但最近我要暂时倾斜一下重心,先重新把内容输出转到新技术上一段时间,具体来说主要是 Kotlin 和 Jetpack。 另外呢为了让这件事更快更高效,我喊了一些高手来和我一起写,还建立了一个专门的网站。现在我们的网站已经正式上线,就是前面我提到的:kaixue.io,名字叫「码上开学」,代码的码。我们要做的,是一个 Kotlin…

阅读全文

HTTPS 为什么是安全的

好久没更新了,这期说一下 HTTPS 的「安全」。 从这期开始,HenCoder 会开始讲自定义 View 以外的内容。目标依然是瞄准当代中国大多数工程师的弱点:瓶颈基础。这期是 HTTP 方面的内容,以后也许继续是网络,也有可能会和其他内容穿插着来。总之,目标不变:瞄准基础但避免晦涩,期望能提高大多数人的天花板。 现在越来越多的网站和服务开始启用 HTTPS,我们作为软件工程师也就需要跟进,把产品里面的 HTTP 请求改成 HTTPS 的。 如果只是做这么一个切换,一般只需要把 url 里的 http 改成 https 就行了,其他的事情由系统的或者网络请求库的 API 来帮我们自动搞定。但总有些例外情况——例如证书自签名——会需要我们对 HTTPS 的原理有更深入的了解,至少知道它所谓的「安全」到底是为什么。 这期我就从几个关键点上介绍一下,HTTPS…

阅读全文

HenCoder 3-1 触摸反馈,以及 HenCoder Plus

休息了几个月,HenCoder 又回来了。 这期的内容是之前说过的,自定义 View 的最后一部分:触摸反馈。触摸反馈的概念简单,但是内部逻辑比较复杂,往往把开发者难倒、让人总也学不会的也是因为逻辑太多绕不过来,所以我这次又做了一个长长的视频来讲解原理,把最本质的东西拆解开来讲,希望能让你比较舒服地吸收。视频的制作花了 5 天时间,一共 12 分钟多,全部是讲的触摸反馈的一些最核心的逻辑和原理。 细节上反而没有讲太多,因为讲这方面细节的文章,网上已经一大堆了,而且不少都写得很好。 闲话说完,放视频: 如果在页面中看不到视频,可以点 这里 去看原视频。 总结: 自定义触摸反馈的关键: 重写 onTouchEvent(),在里面写上你的触摸反馈算法,并返回 true(关键是 ACTION_DOWN 事件时返回 true)。 如果是会发生触摸冲突的 ViewGroup,还需要重写 onInterceptTouchEvent(),在事件流开始时返回 false,…

阅读全文

HenCoder Android UI 部分 2-3 定制 Layout 的内部布局

这期是 HenCoder 布局部分的最后一期:重写 onMeasure() 和 onLayout() 来定制 Layout 的内部布局。 简介 这期虽然距离上期的时间比较久,但主要是我的个人原因,而不是因为这期的内容难。这期的内容还是比较简单的,主要是一些概念和原理上的东西,实操方面非常容易,所以和上期一样,主要把视频看看就差不多啦: 如果看不到视频,可以点 这里 直接去 B 站看;如果你在海外,可以点 这里 去 YouTube 上看。 总结 这期的文章依然是只有总结。但这次主要是因为我最近实在太多事情了…… 定制 Layout 内部布局的方式 重写 onMeasure() 来计算内部布局 重写 onLayout() 来摆放子 View 重写 onMeasure() 的三个步骤: 调用每个子 View 的…

阅读全文

HenCoder Android UI 部分 2-2 全新定义 View 的尺寸

这期是 HenCoder 布局部分的第二期:重写 onMeasure() 来全新定制自定义 View 的尺寸。 简介 这期虽然距离上期的时间比较久,但主要是我的个人原因,而不是因为这期的内容难。这期的内容还是比较简单的,主要是一些概念和原理上的东西,实操方面非常容易,所以和上期一样,主要把视频看看就差不多啦: 在页面里看不到视频的,可以点击 这里 去 B 站看;在海外看得卡的,可以点击 这里 去 YouTube 看。 总结 和上期一样,这期同样是视频之后就直接是总结。 因为关键点全都在视频里讲清楚了,所以这里只总结一下视频中的关键点: 全新定制尺寸和修改尺寸的最重要区别 需要在计算的同时,保证计算结果满足父 View 给出的的尺寸限制 父 View 的尺寸限制 由来:开发者的要求(布局文件中 layout_ 打头的属性)经过父 View 处理计算后的更精确的要求;…

阅读全文

HenCoder Android UI 部分 2-1 布局基础

HenCoder 的第二季:自定义 View 第二部分——布局过程的自定义,从这期正式开始了。好像有点小激动。 废话少说,直入正题。 简介 之前我说过,自定义 View 最关键的有三个点:绘制、布局和触摸反馈。上一季讲过的绘制,内容虽然多(好像讲了 8 期?),但难度上其实是最简单的。而布局就和它相反,布局过程的技术知识,内容比较少(应该 3 期就能讲完),但你先要理解它的内部工作原理才能正确理解它的使用,而它的工作原理却是有点绕的。所以如果你跟着 HenCoder 学习布局过程的自定义,大致会是这样一种体验:看完视频或者读完文章,感觉吸收了一大波知识,信息量好大难以吞咽的样子,但当你真的把它们吞咽下去,然后下载了我的练习项目去做练习的时候,却又发现:卧槽,就这么点东西?布局过程的自定义竟然这么简单? 会者不难这个词在很多地方都讲得通,但在布局过程的自定义上,尤为适用。 具体的概念、原理和技术细节,来看视频吧:…

阅读全文

关注我就能达到大师级水平,这话我终于敢说了

这句话我真的憋了好久。Android 工程师只要关注我,我就能让你达到大师级水平,不是面试时的吹牛逼水平,不是自我欺骗的了解皮毛的水平,是真正的开发实力。以前我有这个自信,没这个证据。但现在,证据我也有了。 关注我的人都知道,我这三个多月来一直在网上分享关于 Android 自定义绘制的技术,并且在一周多前举办了一场线上的「仿写酷应用」活动,让我的粉丝仿写即刻、薄荷健康、小米运动、Flipboard 这四个软件中的几个经典效果,来自我验证一下这三个月来的学习成果。 简单地说,这事儿很成功(脸红)。 经过一周的投稿时间,共收到 97 份来自关注者的投稿(真的很多,出乎意料),而且做得都很棒。在四位原开发者的艰难筛选下,每个效果选出了一位优胜者。下面就是这四位优胜者的作品以及来自各位原开发者对他们的点评。 仿写作品 仿写一:即刻 二话不说,先看结果。 原效果: 仿写效果: 仿得很细致有没有。而且,这个仿写效果看似简单,其实是假象。它右边的数字跳动,是一个字符一个字符跳动替换的,…

阅读全文

HenCoder「仿写酷界面」活动——征稿

HenCoder 的自定义 View 部分第一季——绘制——的技术讲解部分已经结束。在下一季——布局——开始之前,绘制部分还有最后一个环节,那就是在上个月我提到过的:「仿写酷界面」活动。 这次活动的目的很简单: 很多人跟着 HenCoder 学了三个月了,只觉得学了一身好功夫,却无从施展和印证。其实你学到的这些东西慢慢都会体现出它们的价值的,不过如果你比较心急,没关系,今天的仿写就是给你们准备的,你做完了今天的这几个仿写就会惊喜地发现「原来自己已经真的这么牛逼了」。 除了让你们自我证明,我也想为自己证明一下。证明什么呢? 在现在这个连 github 都会有人刷 stars 的急功近利的时代,我相信很多人在第一眼看到 HenCoder 的时候,也会习惯性地以为它只不过是一个吹嘘大于干货的没价值的博客 / 专栏 / 公众号。那么通过这次的活动我就要让人们看到,HenCoder 的读者们在业余时间里跟着我学习了短短三个月后,就能在毫无指导的情况下做出这么炫酷的效果。我要在活动结束后让大家看到,在很多人都忙于刷自己的社交声望、刷点赞数的时候,依然是有人在认真做干货,并且真的做出来了! 为下一季——布局部分留出预创作的时间,…

阅读全文

HenCoder Android 自定义 View 1-8 硬件加速

硬件加速这个词每当被提及,很多人都会感兴趣。这个词给大部分人的概念大致有两个:快速、不稳定。对很多人来说,硬件加速似乎是一个只可远观而不可亵玩的高端科技:是,我听说它很牛逼,但我不敢「乱」用,因为我怕 hold 不住。 今天我试着就把硬件加速的外衣脱掉(并没有),聊一聊它的原理和应用: 硬件加速的本质和原理; 硬件加速在 Android 中的应用; 硬件加速在 Android 中的限制。 本篇是 「HenCoder Android 开发进阶」自定义 View 部分的最后一篇:硬件加速。 如果你没听说过 HenCoder,也可以看看这个: HenCoder:给高级 Android 工程师的进阶手册 概念 在正式开始之前需要说明一下,作为绘制部分的最后一期,本期内容只是为了内容的完整性做一个补充,因为之前好几期的内容里都有涉及硬件加速的技术点,而一些读者因为不了解硬件加速而产生了一些疑问。所以仅仅从难度上来讲,这期的内容并不难,并且本期的大部分内容你都可以从这两个页面中找到: Hardware…

阅读全文

HenCoder Android 自定义 View 1-7:属性动画 Property Animation(进阶篇)

这期是 HenCoder 自定义绘制的第 1-7 期:属性动画(进阶篇) 属性动画的上手篇在这里: HenCoder Android 开发进阶:自定义 View 1-6 属性动画(上手篇) 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 上期的内容,对于大多数简单的属性动画场景已经够用了。这期的内容主要针对两个方面: 针对特殊类型的属性来做属性动画; 针对复杂的属性关系来做属性动画。 TypeEvaluator 关于 ObjectAnimator,上期讲到可以用 ofInt() 来做整数的属性动画和用 ofFloat() 来做小数的属性动画。这两种属性类型是属性动画最常用的两种,不过在实际的开发中,可以做属性动画的类型还是有其他的一些类型。当需要对其他类型来做属性动画的时候,就需要用到 TypeEvaluator 了。 关于 TypeEvaluator 是什么和怎么用,先看一下下面的视频吧: 如果你是手机打开的,可以点这里去…

阅读全文

HenCoder Android 自定义 View 1-6:属性动画 Property Animation(上手篇)

这期是 HenCoder 自定义绘制的第 1-6 期:属性动画 Property Animation(上手篇) 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 前几期发布后,经常在回复里看到有人问我什么时候讲动画。本来我是不打算讲动画的,因为动画其实不算是自定义 View 的内容。但后来考虑了一下,动画在自定义 View 的开发中也起着很重要的作用,有的时候你对动画的了解不够,就难以实现一些自定义 View 的效果。 于是决定:加两期,讲动画! 不过并不是所有的动画都讲,我要讲的是属性动画。 Android 里动画是有一些分类的:动画可以分为两类:Animation 和 Transition;其中 Animation 又可以再分为 View Animation 和 Property Animation…

阅读全文

关于 HenCoder

先寒暄一下:大家好,今天没货。对,宝宝又拖更了。 然后,说点一直想说但没说的,一些「关于」。 关于 HenCoder 的定位 很多人知道,HenCoder 的定位是「高级 Android 工程师的进阶手册」: 这里有三个关键词:高级、进阶、手册。 高级: 定位在高级工程师,是因为我认为现在国内 Android 开发最严重的瓶颈在于高级工程师们的水平普遍遇到了瓶颈。几乎每个小型或微型公司的 Android 团队,都是由一个大哥负责架构搭建、任务分配、主编码以及难点的编码,或者干脆就是整个公司的 Android 只有一个人负责。这些或是带头大哥或是光杆司令的 Android 工程师,水平一般都是不错的,但很多人却也遇到了技术瓶颈,在一个还有一定上升空间的位置就有点摸到了天花板的感觉。而且,这还不是个例,而是普遍现象。这就导致,除了腾讯阿里美团滴滴这些高手云集的大公司,国内的很多公司的 Android App…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-5 绘制顺序

这期是 HenCoder 自定义绘制的第 1-5 期:绘制顺序 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 HenCoder Android 开发进阶 自定义 View 1-3 文字的绘制 HenCoder Android 开发进阶 自定义 View 1-4 Canvas 对绘制的辅助 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 前面几期讲的是「术」,是「用哪些 API…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-4 Canvas 对绘制的辅助 clipXXX() 和 Matrix

这期是 HenCoder 自定义绘制的第 1-4 期:Canvas 对绘制的辅助——范围裁切和几何变换。 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 HenCoder Android 开发进阶 自定义 View 1-3 文字的绘制 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 一图胜千言,一视频胜千图,走你: 如果你是在手机上看的,可以点这里去 B 站看原视频。 1 范围裁切 范围裁切有两个方法: clipRect(…

阅读全文

HenCoder Android 开发进阶:自定义 View 1-3 drawText() 文字的绘制

这期是 HenCoder 自定义绘制的第三期:文字的绘制。 之前的内容在这里: HenCoder Android 开发进阶 自定义 View 1-1 绘制基础 HenCoder Android 开发进阶 自定义 View 1-2 Paint 详解 如果你没听说过 HenCoder,可以先看看这个: HenCoder:给高级 Android 工程师的进阶手册 简介 上期的 Paint 详解里已经说过,文字的绘制所能控制的内容太多太细,必须拆成单独的一期专门来讲。今天这期,就是来把这些细节讲清楚的。 需要说明的有两点: 和上期一样,这期讲的是细节,其中有一部分内容并不是很常用,所以这期你不必要求自己把内容全部背会,而只要做到全部理解,知道都有什么东西,大概怎么用就好,到你真正需要用的时候再拐回来看就是; 除了常用和不常用的内容,本期还会讲到一些比较偏门的细节。这些偏门几乎永远不会用到,我讲这些偏门的目的也只是为了做到知识的全覆盖,帮你破开迷雾解开谜团,把那些「…

阅读全文

HenCoder Android 开发进阶: 自定义 View 1-2 Paint 详解

这期是 HenCoder 自定义绘制的第二期: Paint。如果你没看过第一期,可以先去看一下第一期: HenCoder Android 开发进阶:自定义 View 1-1 绘制基础 简介 上一期我已经简单说过, Canvas 的 drawXXX() 方法配合 Paint 的几个常用方法可以实现最常见的绘制需求;而如果你只会基本的绘制, Paint 的完全功能的掌握,能让你更进一步,做出一些更加细致、炫酷的效果。把 Paint 掌握之后,你几乎不再会遇到「iOS 组可以实现,但你却实现不了」的绘制效果。 由于依然是讲绘制的,所以这期就没有介绍视频了。绘制的内容一共需要讲大概 5~6 期才能讲完,也就是说你要看 5~6 期才能成为自定义绘制的高手。相对于上期的内容,这期的内容更为专项、深度更深。对于没有深入研究过 Paint…

阅读全文

HenCoder Android 开发进阶: 自定义 View 1-1 绘制基础

从今天开始,HenCoder 就正式开讲知识技能了。按照我的计划,第一季是 UI,UI 一共分为三部分:绘制、布局和触摸反馈。本期是绘制部分的第一期。绘制大概会用 5~6 期的时间讲完,整个 UI 的绘制、布局和触摸反馈三部分大概会用十来期。更新频率大约为每周一更(不承诺哟)。 如果你不知道 HenCoder 是什么,可以先看这里: HenCoder:给高级 Android 工程师的进阶手册 自定义绘制概述 二话不说,我反手就是一个视频: 首先总结一下视频中的关键点: 自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw() 绘制的关键是 Canvas 的使用 Canvas 的绘制类方法: drawXXX() (关键参数:Paint) Canvas 的辅助类方法:范围裁切和几何变换 可以使用不同的绘制方法来控制遮盖关系 概念已经在视频里全部讲出来了,知识点并不多,…

阅读全文

HenCoder:给高级 Android 工程师的进阶手册

是什么? 对,标题没写错,我是认真的。给高级 Android 工程师的进阶手册。如果你做 Android 开发,如果你做到了高级但自感遇到了技术瓶颈无法继续提升,可以试试看这里。 这件事的准备工作,我做了整整一年。 为什么? 决定做这件事,源于一年前我和老婆的一次对话。 我:「又拒了个技术分享邀请。」 老婆:「为什么?」 我:「不知道讲什么。」 老婆:「江郎才尽了?」 我:「才尽了。真的不知道讲什么好,选题太难了。关键是选不到对听众有用的题。其实说实话,让我选一个大家关心的技术话题,上台去逼逼几十分钟,让大家听得热血沸腾鼓掌叫好,这一点都不难。但是这种分享大多数时候对听的人并没有什么帮助,虽然他们在听的时候会觉得受益匪浅。」 老婆:「你连粉丝都黑。」 我:「我说的是真的。他们虽然会觉得,哇塞讲得好牛逼啊,我还要学习一个啊,但其实一个分享听下来或者读下来,他们的技术并没有得到任何长进。我觉得技术分享这种事,应该是听者获取知识、讲者获取声望的双赢的事,而假如受益者只有我自己,…

阅读全文

`