1. Canvas 绘制

自定义绘制的方式是重写绘制方法,其中最常用的是 onDraw() 绘制的关键是 Canvas 的使用 onDraw():负责主体内容绘制 Canvas :绘制工具 Canvas 的绘制类方法: drawXXX() (关键参数:Paint) Canvas 的辅助类方法:范围裁切和几何变换 可以使用不同的绘制方法来控制遮盖关系

1.b 仪表盘绘制

Note: 绘制虚线弧形,不能用 path.addArc() + pathDashEffect 来画,会画出奇形怪状的图形,要用canvas.drawArc 画。

1.c 饼图

默认顺时针画出来的。 每多画一个扇形,起始角度都要加起前面几个扇形的角度,划过的角度视扇形大小而定。

2. Canvas 范围裁切

范围裁切有两个方法: clipRect() 和 clipPath() 。 clipRect ```java canvas.save(); // 保存canvas状态

ScrollView 嵌套ListView会显示不全

因为ScrollView 传递给ListView时,用的是 UNSPECIFIED , ListView 设置了 heightSize if (heightMode == MeasureSpec.UNSPECIFIED) { heightSize = mListPadding.top + mListPadding.bottom + childHeight + getVerticalFadingEdgeLength() * 2; }

文本的测量

1. Paint.getTextBounds 测量文本宽高 ```kotlin val text = “Hello, Mango !” val bounds = Rect() paint.getTextBounds(text, 0, text.length, bounds) val textWidth = bounds.width() // 获取文本的宽度 val textHeight = bounds.height() // 获取文本的高度 // 确定文本的垂直边界 val textTop = bounds.top val textBottom = bounds.bottom

Cold flow & Hot flow 解释

在 Kotlin 的 Flow 协程中,“冷流”(Cold Flow)和“热流”(Hot Flow)是两种不同类型的数据流,它们在行为和使用场景上有着显著的区别。理解这些区别对于有效地使用 Flow 至关重要。

operator运算符重载和suspend挂起函数

` suspend operator fun invoke ` 是 Kotlin 中一种特定的函数定义方式,结合了 suspend 关键字和 operator 修饰符,用于实现函数对象的调用和协程支持。 suspend operator fun invoke(todo: Todo) = repository.insertTodo(todo)

80道面试题答案

1. 你写了很多关于java面向对象的知识,你对对象的理解是什么?

K.1-Dalvik 虚拟机 和 ART

在新的 Android 版本里(实际上是从 Android 5.0 Lollipop,大约 2014 年开始),Dalvik 虚拟机已经被完全取代了。

1. 系统启动链

按下电源 —— 系统启动后加载引导程序 [[BootLoader]] —— 引导程序启动该Linux内核 —— 在系统文件中寻找init.rc 文件 —— 启动 init 进程。

在官方代码库搜索关键词的正确方式

1. file 正则 file: 后面在 cs.android.com 用的是 RE2 正则,* 前面必须有一个字符才代表“重复”,单写 * 会被当成“字面量星号”,于是根本匹配不到任何文件名。