前言 这已经是Android UI 绘制过程浅析系列文章的第五篇了,不出意外的话也是最后一篇.再次声明一下,这一系列文章,是我在拜读了csdn大牛郭霖的博客文章<带你一步步深入了解View>后进行的实践. 前面依次了解了inflate的过程,以及绘制View的三个步骤:measure, layout, draw.这一次来亲身实践一下,通过自定义View来加深对这几个过程的理解. 自定义View的分类 根据实现方式,自定义View可以分为以下3种类型. 自绘控件.View的绘制代码(onDraw…
前言 上一篇blog中,了解到measure过程对View进行了测量,得到measuredWidth/measuredHeight.对于ViewGroup,则计算出全部children的宽高进行求和.本篇来分析一下layout过程. layout综述 layout方法对一个View及它的后代分配size与position,是View绘制过程的第二步(the second phase of layout mechanism),其中用到了上一步measure出的宽高.与measure-onMeasu…
前言 这篇blog是我在阅读过csdn大牛郭霖的<带你一步步深入了解View>一系列文章后,亲身实践并做出的小结.作为有志向的前端开发工程师,怎么可以不搞懂View绘制的基本原理——简直就像做后端却对数据库一无所知一样不可原谅! “纸上得来终觉浅,绝知此事要躬行.” 尽管自己对View的绘制仍然处于一知半解的程度,但凡事总要经过从0到1,方能从1到100.今天暂且记录下此时的理解与实践,作为千里之行中的小小一步. 综述 本篇blog先从自己平时最常用到的,在代码中引入布局文件的写法Layout…
前言 draw是绘制View三个步骤中的最后一步.同measure.layout一样,通常不对draw本身进行重写,draw内部会调用onDraw方法,子类View需要重写onDraw(Canvas),以完成最终的绘制. 如果一定要重写draw(Canvas)的话,需要在方法的开始处调用super.draw(canvas). draw过程 draw内部具体做了什么事情,在View.java的源码注释中已经做了非常详细的介绍 /* * Draw traversal performs several…
前言 View的绘制过程分为 measure.layout.draw三个步骤,接下来对这三个步骤逐一进行研究. measure方法的签名 public final void measure(int widthMeasureSpec, int heightMeasureSpec); measure方法用来测量View的尺寸.两个参数widthMeasureSpec/heightMeasureSpec声明了Parent View所能提供的宽/高. 需要注意的是,widthMeasureSpec/he…
一.绘制流程源码路径 1.Activity加载ViewRootImpl ActivityThread.handleResumeActivity() --> WindowManagerImpl.addView(decorView, layoutParams) --> WindowManagerGlobal.addView() 2.ViewRootImpl启动View树的遍历 ViewRootImpl.setView(decorView, layoutParams, parentView) --&…
前言 自己定义View是Android开发人员必须了解的基础 网上有大量关于自己定义View原理的文章.但存在一些问题:内容不全.思路不清晰.无源代码分析.简单问题复杂化等等 今天,我将全面总结自己定义View原理中的layout过程,我能保证这是市面上的最全面.最清晰.最易懂的 文章较长.建议收藏等充足时间再进行阅读 文件夹 imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="文件夹" title="&…
目录 目录 1. 知识基础 具体请看我写的另外一篇文章:(1)自定义View基础 - 最易懂的自定义View原理系列 2. 作用 计算View视图的位置. 即计算View的四个顶点位置:Left.Top.Right和Bottom 3. layout过程详解 同measure过程一样,layout过程根据View的类型分为两种情况: 如果View = 单一View,则仅计算本身View的位置: 如果View = VieGroup,除了计算自身View的位置外,还需要确定子View在父容器中的位置.…
Jeff Lee blog:   http://www.cnblogs.com/Alandre/  (泥沙砖瓦浆木匠),retain the url when reproduced ! Thanks 今天我们来Android UI第一讲:实现Layout 背景局部Shape圆角设计 效果图: 第一步:定义一个shape res/drawable/shape_to_corner_no_bottom_line.xml <?xml version="1.0" encoding=&quo…
2015-07-27 16:52:58 一.如何通过继承ViewGroup来实现自定义View?首先得搞清楚Android时如何绘制View的,参考Android官方文档:How Android Draws Views 以下翻译摘自:http://blog.csdn.net/linghu_java/article/details/23882681,这也是一片好文章,推荐大家看看- When an Activity receives focus, it will be requested to d…