前言 这已经是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…
在上一篇博客<Android中Activity启动过程探究>中,已经从ActivityThread.main()开始,一路摸索到ViewRootImpl.performTraversals()了.本篇就来探究UI的绘制过程. performTraversals()方法非常长,其中关键性的三个步骤是依次调用了performMeasure(), performLayout(), performDraw().分别来看这三个步骤吧! Measure过程(测量过程) 直接来看performMeasure…
2015-07-28 17:29:19 这一篇主要看看布局过程 一.布局过程肯定要不可避免的涉及到layout()和onLayout()方法,这两个方法都是定义在View.java中,源码如下: /** * Assign a size and position to a view and all of its * descendants * * <p>This is the second phase of the layout mechanism. * (The first is measur…
Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下的过程.View的绘制经历三个过程:Measure.Layout.Draw.基本流程如下图: performTraversals函数,具体的可以参考一下源代码: private void performTraversals() { final View host = mView; ... host.measure(childWidthMeasureSpec, childHeightMeasureS…
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52840065 本文出自:[openXu的博客]   在Activity完全解析的第一篇文章Activtiy完全解析(一.Activity的创建过程)中,我们分析了从调用startActivtiy()到Activtiy创建完成的整个过程.其中step20:ActivtiyThread.handleLaunchActivity(r, null)这一步中有两个重要的步骤,第一步就是调用perfo…
概述 上一篇博文对DecorView和ViewRootImpl的关系进行了剖析,这篇文章主要是来剖析View绘制的三个基本流程:measure,layout,draw.仅仅有把这三个基本流程搞清楚了,平时在自己定义View的时候才会有清楚的思路!開始进入正题. View的measure过程 三个流程均是从ViewRootImpl的performTraversals方法開始的,例如以下所看到的: private void performTraversals() { ...... int child…
Android的View绘制是从根节点(Activity是DecorView)开始,他是一个自上而下的过程.View的绘制经历三个过程:Measure.Layout.Draw.基本流程如下图: performTraversals函数,具体的可以参考一下源代码: private void performTraversals() { final View host = mView; ... host.measure(childWidthMeasureSpec, childHeightMeasureS…
上篇博客我们介绍了View的测量过程,这只是View显示过程的第一步,第二步就是layout了,这个我们一般译作布局,其实就是在View测量完成之后根据View的大小,将其一个一个摆放在ViewGroup中的过程.OK,那我们今天就来聊聊这个过程.在本文之前我已经有过三篇博客来介绍View的绘制过程,那三篇文章有助于你理解本文: 1.View绘制详解,从LayoutInflater谈起 2.View绘制详解(二),从setContentView谈起 3.View绘制详解(三),扒一扒View的测…
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52392430 前言:前一篇的mediaPlayer框架,对于各个模块的关系,得先从核心类MediaPlayer铺开,同样看下今天的Agenda: MediaPlayer从create到setDisplay时序图 MediaPlayer的create过程 MediaPlayer的setDataSource过程 MediaPlayer的setDispl…
View从创建到显示到屏幕需要经历几个过程: measure -> layout -> draw measure过程:计算view所占屏幕大小layout过程:设置view在屏幕的位置draw过程:绘制view 继承自view的控件的layout过程 layout过程相对measure过程比较简单,其作用是将view绘制到合适的位置 layout方法: /* final 标识符 , 不能被重载 , 参数为每个视图位于父视图的坐标轴 * @param l Left position, relat…
View类是android中非常重要的一个类.view是应用程序界面的直观体现,我们看到的应用程序界面就能够看作是View(视图)组成的. 那么我们应用程序的界面是怎么创建的呢,也就是应用程序的View是什么时候创建的? 在android中与界面直接相关的就是Activity了. 我们平时在Activity的onCreate()函数中,通过调用它的setContentView()函数,将我们应用程序的界面资源设置进去.然后执行程序就能够看到我们布局文件里描写叙述的界面了. 从我们调用setCon…
本文主要探讨能够触发performTraversals()执行的invalidate().postInvalidate()和requestLayout()方法的流程.在调用这三个方法到最后执行到performTraversals()方法,涉及到到通过Choroegrapher请求Vsync信号,实现按帧绘制的流程,所以还会介绍Choroegrapher类的工作流程. 一.requestLayout()流程 invalidate()和postInvalidate()能够触发View的重画,这两个方…
什么是Android Jetpack https://developer.android.com/jetpack Android Jetpack是一个由多个库组成的套件,可帮助开发者遵循最佳做法.减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作. 什么是Jetpack Compose Jetpack Compose是用于构建原生Android界面的新工具包.它可简化并加快Android上的界面开发,帮助您使用更少的代码.强大的工具和直观…
http://www.lupaworld.com/article-222973-1.html 当我们设计应用程序时,希望能够尽最大限度的适配各种设备,包括4寸屏.7寸屏. 10寸屏等等,Android开发文档给了我们参考,而且Google IO的app(如图二)也实现了这种思想,他们都是使用layout.layout-large里面不同的布局文件实现的,下面是翻译的developer.android.com一篇的文章,里面的例子能详细的看出layout.layout-large并使用Fragme…
注意:涉及的代码为android内核代码而不是android源码. 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计, 截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有 率,终端设备的多样性亟需更多的移动…
在前面一篇文章中,我们分析了Android模块的编译过程.当Android系统的所有模块都编译好之后,我们就可以对编译出来的模块文件进行打包了.打包结果是获得一系列的镜像文件,例如system.img.boot.img.ramdisk.img.userdata.img和recovery.img等.这些镜像文件最终可以烧录到手机上运行.在本文中,我们就详细分析Android系统的镜像文件的打包过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! <Andr…
Tab布局是iOS的经典布局,Android应用中也有大量应用,前面也写过Android中TAb的实现,<Android UI开发第十八篇——ActivityGroup实现tab功能>.这篇文章总结几种Tab的实现. 1)继承自TabActivity,TabActivity已在API Level 13中不建议使用,所有作者不建议在新开发的应用中使用TabActivity,关于Tabactivity的一些分析可以参考<Android TabActivity之感叹,英雄暮路,美人辞暮,昔日的…
Hadoop集群搭建安装过程(三)(图文详解---尽情点击!!!) 一.JDK的安装 安装位置都在同一位置(/usr/tools/jdk1.8.0_73) jdk的安装在克隆三台机器的时候可以提前安装,通过scp使安装文件和环境配置(/etc/profile)都拷贝过去,并使三台机 器都通过(source /etc/profile)命令使之生效 下载JDK(本次安装使用的版本是jdk1.8.0_73) 解压JDK : tar -zxvf /usr/tools/jdk-7u72-linux-x64…
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程   在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容包是没有安装的, 而早期的安卓是有不少用的32位的开发包.新手往往很难搞清楚其中的问题根源.而且安卓源码的编译又依赖了很多额外的的第三方开发包,所以编译过程会因为缺少这些包导致编译失败.另外一个问题是在新的Ubuntu系统下,因为gcc 和 g++编译器的升级原因,导致早期的代码在新的编译器下发生错…
版权声明:本文为博主原创文章,未经博主允许不得转载. Android 仿PhotoShop调色板应用(三) 主体界面绘制    关于PhotoShop调色板应用的实现我总结了两个最核心的部分:   1. 主体界面不同区域的绘制   2. 颜色选择的生成与交互 这里我讲述一下第一要点,也就是ColorPickerDialog对主体界面的绘制. 首先还是看一下ColorPickerDialog整体显示的效果(见图1)     图1 对应着效果图我画了一张界面结构分析图,相信看了之后会对该界面的组成很…
好长时间没写Android UI方面的文章了,今天就闲扯一下Android的Holo主题.一直做android开发的可能都知道,Android 系统的UI有过两次大的变化,一次是android 3.0发布,UI开发支持了Fragment,主要增加了大屏幕显示的支持,这个版本就开始支持Holo Theme,由于android 3.X的设备占有率也不高,这一次的改变没有引起大的关注:再一次的改变就是Android 4.0 ,也就是通常所说的 ICS ,这个于2011年底发布的Android系统,同时…