竹杖芒鞋轻胜马

Flutter-3 渲染流程——layout

前言 前一节 Flutter-2 渲染流程——bulid 我们分析了 Flutter 渲染流程中的第一个(严格来说不能是第一步,前面还有动画)步骤 build,今天来看一下 layout。 前文我们分析到,update 的时候回进行 updateRenderObject 也就是把最新的配置到 RenderObject 上。在更新的时候又会触发 markNeedsLayout(),本节我们就...

Flutter-2 渲染流程——bulid

前言 前一节《Widget Element 和 RenderObject》 我们分析了 Widget Element 和 RenderObject 之间的关系。后续继续分析 Flutter 的渲染流程。 从这张图可以看出,整个渲染流程分为多个阶段,今天我们来看第一个阶段——build。 请求 Vsync 当我们调用 State.setState() 会引起 StateFullWidg...

Flutter 1 Widget Element 和 RenderObject

前言 和 Android 中 View 承载所有视图功能不同,Flutter 中控件系统涉及到三种不同的对象:Widget、Element 和 RenderObject,想要用好 Flutter 就必须搞清楚它们之间的关系。我们先来看一下他们之间的关系,后续在深入挖掘一下 Flutter 的整个渲染流程。 类定义 先看下这三个核心类的定义,看能找到哪些有用信息。 Widget Widget...

RecyclerView 2 缓存机制

上一节分析了 RecyclerView 的绘制流程,本节我们分析下 RecyclerView 的缓存机制。(本文基于 LinearLayoutManager) 源码分析 上一节中在 LayoutManager 中我们提到过在 layoutChunk 中的 View view = layoutState.next(recycler); 执行了 itemView 的复用或创建,我们从这里开始...

RecyclerView 1 绘制流程

Recyclerview 推出已经很久了,之前一直局限在使用上没有深入学习它的源码,本系列从源码上分析它的绘制流程、缓存机制、动画机制等。先看一下它的绘制流程。 onMeasure @Override protected void onMeasure(int widthSpec, int heightSpec) { // 如果 LayoutManager 为 ...

Android 事件系列-5 NestedScrolling

先看这样一个效果图,这个效果图中有两级滑动。滑动开始时父 View 可滑动,滑动一定距离之后,父 View 不在继续上滑,此时子 View 接管滑动事件。 本系列的前两篇文章,我们学习了 Android View 和 Viewgroup 中的事件分发,从中我们知道如果一个控件决定接管一系列事件,那么这系列事件的 targetView 就会被确定,该系列事件的所有后续事件都会被分发给该 ...

Android 事件系列-4 ViewDragHelper

前言 自定义 ViewGroup 有时候需要对子 View 进行拖拽处理,Android 提供了一个很好的工具类 ViewDragHelper,本节我们学习一下它。 Demo 我们先看一个 Demo,首先定义一个 ViewGroup,它继承了 LinearLayout 源码如下: public class DragLayout extends LinearLayout { sta...

Android 事件系列-3 scrollTo、scrollBy 和 Scroller

前言 这个系列的前两节分别分析了 View 和 ViewGroup 中的事件分发,Android 中的事件分发还涉及到 Activity。但是内容过于简单,就不详细分析了,本节我们学习下 View 的 scrollTo、scrollBy 以及滑动辅助 Scroller。 Demo 正文开始之前我们先看一个 Demo。 public class MainActivity extends A...

Android 事件系列-2 ViewGroup 中的事件分发

上一篇中我们分析了 View 中的事件分发,Android 中直接继承 View 的控件是最小单位,不能包含其他子 View,其中的分发逻辑也比较简单。本节研究下 ViewGroup 中的事件分发。 ViewGroup 事件传递源码分析 Demo ViewGroup 中的 dispatchTouchEvent 逻辑较多,我们先看一个 Demo,从这个 Demo 深入分析 ViewGro...

Android 事件系列-1 View 中的事件分发

最近想系统的学习下 Android 的 Scroller、NestedScrolling 以及 ViewDragHelper 。在学习这些东西之前有必要复习下 Android 的事件分发机制。 事件分发的目的 事件分发的目的是找到处理当前事件的目标并将事件交给他处理。 事件分发的参与者 Activity、ViewGroup、View 是事件分发的三个参与者,下面我们由浅入深先看一下 Vi...