字节跳动-Android自定义组件开发,带你领略什么叫细节爆炸!
前言
今天总结一下Android开发中的自定义控件的开发,Android中所有控件和布局的基类都是View,自定义控件也就是继承View或者View的派生类,然后再重写类中的内部方法。
通常来说自定义控件分为三种:
1.自定义View:继承View
2.基于现有组件:继承View的派生类
3.组合的方式:自定义控件中包含了其他的组件
1、概述
说来惭愧,已经有很长时间没有更新技术文章了,最近面试了一些同学,对于一些知识点,不少候选人同学其实掌握的不够扎实,而在对于一些知识点逐渐深入的过程中,发现我自己也有些遗忘了,所以想重新梳理一下,把过程记录下来,给大家一些参考,如果能有帮助,那最好不过了。
这一篇就先从 View 开始。
对于安卓开发来说,我想除了 Activity 以外,就是 View 接触的最多了。这篇文章就以面试官的角度来讲讲 View 的一些知识点,看看问题是如何一层层的深入下去的。
2、View 题目层次
-
我们以最常见的两个面试题目(View 的绘制流程 和 View 的事件分发)开始,逐层深入去看一下。
-
先上 View 的绘制流程。
-
View 的绘制流程是 measure -> layout -> draw,这个大家都熟悉。
-
不过由此引申的知识点还是有不少的:
-
首次 View 的绘制流程是在什么时候触发的?
-
ViewRootImpl 创建的时机?
-
ViewRootImpl 和 DecorView 的关系是什么?
-
DecorView 的布局是什么样的?
-
DecorView 的创建时机?
-
setContentView 的流程
-
LayoutInflate 的流程
-
Activity、PhoneWindow、DecorView、ViewRootImpl 的关系?
-
PhoneWindow 的创建时机?
-
如何触发重新绘制?
-
requestLayout 和 invalidate 的流程
-
requestLayout 和 invalidate 的区别
上面这些就是我想到的由 View 绘制流程引申的一系列问题,其实如果细想,还会有很多,这里就作为个引子。下面看看问题的详解(以下代码分析基于 SDK 28)。
如果上面的问题读者朋友们都能回答上来,也就没有必要往下看了~
学习思维脑图
image《Android自定义组件开发笔记》
image第一章 View 的绘图流程
image image第一次接触图形界面(GUI)的开发,很难想象展现在眼前的各种五花八门的组件是开发人员和美工通力合作共同付出的结果。开发平台成套定义出各类组件供我们使用,风格、色调、观感等外观表现等需要高度和谐统一,又要从技术上为用户ᨀ供一致的操控体验,这是一件繁重的工作,马虎不得。特别是手机 App,离用户眼睛的距离更近,可能一个像素就会影响用户的使用感受,因此对界面ᨀ出了更高的要求,所以,自定义组件成了 Android 开发人员掌握的一门必备技能。
第二章 Graphics2D API
image image在 Android 中,2D 图形由 Android SDK ᨀ供,本章我们将向大家介绍 Graphics2D 涉及到的常用类,如基本的数据结构类、位图类、绘图类等,并介绍和使用常见的绘图方法。
第三章 使用 Graphics2D 实现动态效果
image image本章将向您讲述如何通过绘图实现动态效果。动态包括两个方面,一是让画面动起来, 如实现游戏中的爆炸动画,地球仪的自转和公转,小鸟翅膀的摆动,手表时针分针秒针的转运等等,这一类动画可以通过周期性重画实现,二是实现和用户的互动, 用户通过手指在手机屏幕上移动,在绘图区绘制曲线、矩形、圆、文字等图案,如绘图软件就是这种类型。
第四章 双缓存技术
image image为什么叫“双缓存”?说白了就是有两个绘图区,一个是 Bitmap 的 Canvas,另一个就是当前View 的 Canvas。先将图形绘制在 Bitmap 上,然后再将 Bitmap 绘制在 View 上,也就是说,我们 在 View 上看到的效果其实就是 Bitmap 上的内容。这样做有什么意义呢?
第五章 阴影、渐变和位图运算
image image本章将向您介绍阴影、渐变和位图运算等技术。阴影只是一个狭义的说法,实际上也包括发光等效果;Android 也ᨀ供了强大的渐变功能,渐变能为物体带来更真实的质感,比如可以用渐变绘制一颗五子棋或一根金属圆棒;位图运算就更有趣了,Android 为 Bitmap 的运算ᨀ供了多达16 种运算方法,获得的结果也不尽相同。不过,主要还是在于灵活应用
第六章 自定义组件
image imageAndroid SDK 为我们ᨀ供了一套完整的组件库,数量多、功能强,涉及到方方面面,但是,我们依然看到软件市场上的每个 App 都有自己独特的东西,绝不是千遍一律的,而且也会和 IOS相互借鉴,这就需要我们对组件进行定制,实现自己独树一帜的用户体验和界面风格。
结尾
本篇是结合我之前面试别人的经验,以及跟一些在大厂待过的朋友,讨论总结出的一份很全面的大公司需要用到的一些高端Android技术。这里也专门整理了一个文档,重点和难点都有详细解析。
这些题目有点技术含量,需要好点时间去研究一下的;