6 CTO_1649900265

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 4w+

addWindowToListlnOrdeLocked()的执行过程

addWindowToListln〇rdeLocked()的执行过程该 函 数 是 在 addWindow()中 被 调 用 的 , 其 作 用 是 将 新 建 的 WindowState对 象 添 加 到 mWindows列 表中 。 表 面 上 看 , 该 函 数 的 执 行 过 程 有 点 复 杂 , 但 其 执 行 的 目 的 就 是 当 添 加 新 建 的 窗 口 后 , mWindows列表 能 够 保 持 其 内 在 顺 序 上 的 固 有 规 则 , 因 此 , 如 果 按 照 这 种

2020-07-30 23:59:55

删除窗口的时机

删除窗口的时机Android中 的 窗 口 和 Windows操 作 系 统 中 的 窗 口 管 理 有 一 个 明 显 差 别 ,就 是 窗 口 的 右 上 角 没 有 关 闭按 钮 , 即 用 户 不 能 直 接 关 闭 窗 口 。从 SD K 的 角 度 来 看 , SDK希 望 程 序 员 不 要 直 接 去 操 作 窗 口 , SD K 已 经 对 窗 口 进 行 了 各 种 封 装 ,Activity,菜 单 、 对 话 框 等 , 这 些 控 件 的 背 后 都 对 应 一 个 窗 口

2020-07-30 23:25:27

assignLayersLockedO 的执行过程

assignLayersLocked() 的执行过程mWindows中 窗 口 的 排 列 顺 序 反 映 了 窗 口 应 该 被 层 叠 顺 序 , 而 assignLayersLocked()函 数 的 作 用 正 是根 据 mWindows自 身 的 顺 序 给 窗 口 的 mLayer进 行 赋 值 。 private final void assignLayersLocked() { int N = mWindows.size(); int curBaseLa

2020-07-30 22:14:28

导 致 V iew 树重新遍历的总体诱因

导 致 V iew 树重新遍历的总体诱因下面介绍各种能引起View树重新遍历的操作,这些操作总的来讲可以分为三类。一类是导致视图大小发生变化;第 二 类是导致ViewGroup重新为子视图分配位置;第三类是视图显示情况发生变化需要 重 绘 。这 三 类 情 况 最 后 都 直 接 或 间 接 调 用 到 三 个 函 数 ,分 别 为 invalidateO、 requestLayoutO及requestFocus(),而这三个函数最终都会调用到ViewRoot中 的schueduleTraversa

2020-07-29 23:34:24

V ie w 内默认消息派发过程

V ie w 内默认消息派发过程public boolean dispatchTouchEvent(MotionEvent event) { /** * 一 调 用 onFilterTouchEventForSecurity()处理窗口处于模糊显示状态下的消息。所谓的模糊显示是 * 指 ,应用程序可以设置当前窗口为模糊状态,此时窗口内部的所有视图将显示为模糊效果。这样做的目 * 的 是 为 了 隐 藏 窗 口 中 的 内 容 , 对 于

2020-07-29 23:31:17

measure内部设计思路

host.measure()会 调 用 到View类 的 measure()函数,该函数然后回调onMeasure()。在一般情况下,host对象是一个ViewGroup实例,该ViewGroup会重载onMeasure(),当然如果host没有重载onMeasure(),则会执行View类中默认的onMeasureO。在一般情况下,程序员需要在重载的onMeaSure()函数中逐一对 所 包 含 的 子 视 图 执 行 measureO操 作 , 为 了 简 化 程 序 设 计 , ViewGrou

2020-07-29 22:35:47

根视图内部(Activity)消息派发过程

首先来看mView.dispatchTouchEvent()的派发过程。该函数是在ViewRoot中调用的, mView的类型可能有两种情况,对于应用窗口而言, mView是一个PhoneWindow中的DecorView类型;对于非应用窗口而言, mView是一般的ViewGroup类型。在 DecorView中,首先判断是否存在Callback对象,它和按键消息派发时的Callback对象一样,就 是 Activity类 。 如 果 没 有 Callback对 象 , 则 直 接 调 用 Dee

2020-07-29 22:31:00

触摸消息总体派发过程

** 和按键派发类似,当消息获取模块通过pipe将消息传递到客户端, InputQueue中的next()函数内部调 用 nativePollOnce()函数中会读取该消息。如果有消息,则 回 调ViewRoot内部的mlnputHandler对象的 dispatchMotion()函数,该函数仅仅是发起一个DISPATCH_POINTER异步消息,消息的处理函数是deliverPointerEvent()。执行完该函数后,调 用 finishInputEvent()向消息获取模块发送一个回执,以便

2020-07-29 22:13:15

绘制滚动条

/** * <p>Request the drawing of the horizontal and the vertical scrollbar. The * scrollbars are painted only if they have been awakened first.</p> * * @param canvas the canvas on which to draw the scrollbars * * @

2020-07-29 17:40:43

ViewGroup 类中 drawChild()过程

dmwChildO的核心过程是为子视图分配合适的Canvas剪切区,剪切区的大小取决于child的布局大小,剪切区的位置取决于child的内部滚动值及hild内部的当前动画。该函数内部的主体流程如图13-42所示,分为八大步。 protected boolean drawChild(Canvas canvas, View child, long drawingTime) { boolean more = false; final int cl = child.mLe

2020-07-28 22:54:46

ViewGroup类 中 绘 制 子 视 图dispatchDraw()内部流程

/** * dispatchDraw()的作用是绘制父视图中包含的子视图,该函数的本质作用是给不同的子视图分配合 * 适 的 画 布 (Canvas),至于子视图如何绘制,则又递归到View类 的 draw()函数中。应用程序一般不需要 * 重 载 dispatchDrawO函数,而只需要在onLayout()中为子视图分配合适的大小, dispatchDraw()将根据前 * 面分配的大小调整Canvas的内部剪切区,并作为绘制子视图的画布。所有的ViewGro..

2020-07-28 22:41:04

View类中draw()函数内部流程

View类中draw()函数内部流程/**该函数的内部流程正如源码中的注释所讲.分为5步**/ public void draw(Canvas canvas) { if (ViewDebug.TRACE_HIERARCHY) { ViewDebug.trace(this, ViewDebug.HierarchyTraceType.DRAW); } final int privateFlags = mPri

2020-07-28 22:26:19

ViewRoot的draw()分析

/** * ViewRoot中的draw()函数主要处理一些根视图中的特有属性,并且处理完毕后同样要调用View类 * 中 的draw()进行具体的绘制。 * Surface按照底层的驱动模式可以分为两种,一种是使用图形加速支持的Surface,俗称显卡,另一 * 种是使用CPU及内存模拟的Surface。因此,根视图中将针对不同的Surface采用不同的方式从该Surface * 中获取一个Canvas对象,并 将 该Canvas对象派发到整个视图...

2020-07-26 23:27:10

View绘制元素

在介绍视图绘制之前,先来了解一下一个视图中都包含哪些需要绘制的元素,比如一个TextView,除了具体的文字外,还需要绘制文字的背景等。那么,视图中都包含哪些绘制元素呢?总的来讲,绘制元素包含四个,分别如下:View背景。每个视图都有一个背景,比 如 LinearLayout、 TextView,背景可以是一个颜色值,也可以是一幅图片,甚至可以是任何Drawable对象,比如一个Shader、一 个DrawableState等 。应用程序可以使用 setBackgroundColor()、 se

2020-07-26 23:25:07

LinearLayout的onLayout()分析

/** * onLayout()函 数 中 首 先 根 据 mOrientation变 量 判 断 是 水 平 还 是 垂 直 ,如 果 是 垂 直 , 则调用 * layoutVertical()开始进行 layout 操作。 */ @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (mOrientation == VERTI.

2020-07-26 21:42:22

布 局 (layout ) 过程

布 局 (layout ) 过程 public final void layout(int l, int t, int r, int b) { /** * 在 layout()函数中,首先调用setFrame()函数给当前视图设置参数中指定的位置,然后回调onLayoutO * 函数。 ViewGroup类中重载了 onLayout()函数,并且将其函数类型设置成了一个abstract类型,因此, * 所 有 的ViewGroup实例必

2020-07-26 21:29:20

LinearLayout 中的 onMeasure()

LinearLayout 中的 onMeasure() /** * LinearLayout中 的onMeasure()函数内部,首先判断该LinearLayout是水 * 平的还是垂直的,并分别调用measureHorizontal()和 measureVertical(),下面仅分析垂直方向的measure * 过程。 */ @Override protected void onMeasure(int widthMeasureSpec, int

2020-07-26 21:17:02

measure()源码分析

/*** host.measure()会 调 用 到View类 的 measure()函数,该函数然后回调onMeasure()。在一般情况下,* host对象是一个ViewGroup实例,该ViewGroup会重载onMeasure(),当然如果host没有重载onMeasure(),* 则会执行View类中默认的onMeasure()。在一般情况下,程序员需要在重载的onMeaSure()函数中逐一* 对 所 包 含 的 子 视 图 执 行 measureO操 作 , 为 了 简 化 程 序 设

2020-07-26 20:08:32

android一行命令实现多渠道打包并自动进行资源混淆(Walle,AndResGuard)

多渠道打包和资源混淆的作用这里我就不再阐述了。网上有很多。本篇博客我们来介绍一下如何实现多渠道打包之前先进行资源混淆,这样一来我们打出来的包都是已经进行过资源混淆的了。如果你还有其他的需求,也可以按照这个方法实现。多渠道打包(Walle)这里多渠道打包我使用的是美团的Walle,具体的使用方式Github上已经介绍的很详细了。这里我先来实现一下多渠道打包首先按照说明集成一下walle和签名配置配置build.gradle在位于项目的根目录 build.gradle 文件中添加Walle Gr

2020-07-20 09:26:21

performTraversals()

/** * performTraversals()函数正是系统内进行View树遍历工作的核心函数,该函数内部逻辑稍有复杂, * 一个函数代码长度约600行。虽然该函数的代码很长,但其主体逻辑却是很清晰的,其执行过程可简单 * 概括为根据之前所有设置好的状态,判断是否需要重新计算视图大小 measure)、是否需要重新安置视 * 图 的 位 置 layout),以及是否需要重绘 draw)视图, */ private void performTra..

2020-07-10 16:18:51

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 分享王者
    分享王者
    成功上传51个资源即可获取