关闭

android如何绘制view

270人阅读 评论(0) 收藏 举报
 Android画的操作是由Framework层来进行处理的,整个 draw是从根View开始的,ViewGroup向子View发出 draw的请求,然后子View负责自己重画它们的invalid区域。Drawing一个Layout必须通过两个步骤:
       1. 测量。measure() 从根节点到叶子节点依次测量,这样每个View都会存有各自的dimension.在我们的程序种我们可以重写onMeasure来设置更为精确的content大小,重写完后必须调用setMeasureDimension来存储View的宽和高 。 
       2.布局。layout也是从父节点到子节点,父节点根据刚才传递进来的measure信息来拜访它们的子节点。
       当一个视图的measure()方法返回时,它的getMeasuredWidth()和getMeasuredHeight() 值必须被设置,以及所有
这个视图子节点的值。一个view的measure的宽度和高度值必须符合父视图的限制。这确保在度量过程之后,所有父节点接受所有它们的子节点的度量值。一个父视图可能会在其子视图上多次调用measure()方法。比如,父视图可能会通过未指定的尺寸调用measure来找到它们的大小,然后使用实际数值再次调用measure(),如果所有子视图未做限制的尺寸总合过大或过小(也即是,如果子视图之间不能对各自占据的空间达成共识的话,父视图将会干预并且使用第二个过程的规则)。
       View.MeasureSpec 用于子View告诉父View它们想如何被测量和怎么放置。而 LayoutParams则是描述了View的宽和高是多少。对于每一个区域可以指定如下的值:  
  •  一个准确的数值。
  • ·FILL_PARENT,这意味着视图想和父视图一样大(减掉填充padding)。
  •  WRAP_CONTENT,这意味着视图只想有刚好包装其内容那么大(加上padding)。
      对于不同的ViewGroup子类,有相应的LayoutParams子类。比如,相对布局RelativeLayout有它自己的LayoutParams子类,这包含了能够让子视图横向和竖向居中显示的能力。
       
      度量规格(MeasureSpecs)被用来沿着树从父到子的下传度量需求。一个MeasureSpecs可以是下面三种模式之一:
  • UNSPECIFIED:父视图来决定其子视图的理想尺寸。比如,一个线性布局可能在它的子视图上调用measure() on its child,通过设置其高度为UNSPECIFIED 以及一个宽度为EXACTLY 240,来找出这个子视图在给定240像素宽度的情况下需要显示多高。
  •  EXACTLY:父视图用来给子视图强加一个准确的尺寸。子视图必须使用这个大小,并确保其所有的后代将适合这个尺寸。
  • AT_MOST:这被父视图用来给子视图强加一个最大尺寸。子视图必须确保它自己以及所有的后代都适合这个尺寸。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Android应用层View绘制流程与源码分析

【工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果】1 背景还记得前面《Android应用setContentView与LayoutInflater加载解析机制源码分析》这篇文章吗?我们有分析到Activity中界面加载显示的基本流程原理,记不记...
  • yanbober
  • yanbober
  • 2015-05-31 16:30
  • 105511

Android View绘制三大流程探索及常见问题

View绘制的三大流程,指的是measure(测量)、layout(布局)、draw(绘制) measure负责确定View的测量宽/高,也就是该View需要占用屏幕的大小,确定完View需要占用的屏幕大小后,就会通过layout确定View的最终宽/高和四个顶点在手机界面上的位置,等通过meas...
  • zhuwentao2150
  • zhuwentao2150
  • 2016-12-20 16:14
  • 1684

Android知识架构 · 电话面试 · View的绘制流程

View的绘制流程:OnMeasure()——>OnLayout()——>OnDraw()各步骤的主要工作: OnMeasure():测量视图大小。从顶层父View到子View递归调用measure方法,measure方法又回调OnMeasure。 OnLayout():确定View位置...
  • carter_yu
  • carter_yu
  • 2016-09-12 21:25
  • 1629

Android绘制View相关的几个问题

前面关于View绘制的话题好像零散的写过博客,虽然好久没有认真的研究一些东西了,平时忙其他的东西,但是本着每个月必须花几天时间看看android的想法,今天整理了几个View绘制相关的问题,这里不会涉及View测量布局绘制的那部分细节,因为这些前面已经写过了。主要有以下几个问题 1.View绘制流...
  • cauchyweierstrass
  • cauchyweierstrass
  • 2016-06-21 10:50
  • 3106

Android View绘制流程(看过最详细的一篇)

一、官方文档      先是看了一下官方的文档, 地址是http://developer.android.com/guide/topics/ui/how-android-draws.html,它大体讲解了View的绘制流程。在此翻...
  • u011052996
  • u011052996
  • 2015-03-31 14:03
  • 2159

Android View 绘制流程 及 自定义View

View绘制流程调用链图 记清楚函数调用的顺序才能准确地进行调用。 根据调用链,可将整个绘制过程分为三部分:Measure - Layout - Draw Measure 过程 1. 测量过程由上至下,在measure过程的最后,每个视图将存储自己的尺寸大小和测量...
  • asdf717
  • asdf717
  • 2016-09-19 14:29
  • 581

androidView树的绘图流程

整个View树的绘图流程 是在ViewRoot.Java类的performTraversals()函数展开的 performTraversals()执行过程 判断是否需要重新计算视图大小(measure)是否重新需要安置视图的位置(layout)是否需要重绘(draw) mesarue(...
  • zhaoyazhi2129
  • zhaoyazhi2129
  • 2016-05-10 19:24
  • 1194

Android自定义View(一)View绘制流程以及invalidate()等相关方法分析

转自:http://blog.csdn.net/yanbober/article/details/46128379/      【工匠若水 http://blog.csdn.net/yanbober】 原本打算自己写的,但是看到这篇文章,觉得写的太好了,,,...
  • TokgoLiang
  • TokgoLiang
  • 2016-01-08 10:18
  • 1404

Android的视图绘制与事件分发流程(底层)

本文我们来简单的分析下Activity的SetContentView方法底层是如何对我们的layout.xml文件进行处理,然后分析一下事件是如何从WindowManagerService中传递到View的dispatchTouchEvent方法中的,最后会简单了解下PhoneWindow、Deco...
  • evan_man
  • evan_man
  • 2016-08-13 15:26
  • 1015

Android View的绘制流程三部曲

如果我们用面向对象的思维方式来思考,就会觉的View的绘制机制是很合理,很科学的。我们要在一张纸上画一幅画,首先我们要测量一下这幅画有多大吧,然后确定在纸的哪个地方画会显得比较美观,最后才是用画笔工具将画绘制在纸上。 在Android中也是一样的。View的绘制流程主要是指measure,layou...
  • xyh269
  • xyh269
  • 2016-10-24 00:28
  • 2786
    个人资料
    • 访问:272095次
    • 积分:2927
    • 等级:
    • 排名:第13968名
    • 原创:32篇
    • 转载:71篇
    • 译文:6篇
    • 评论:36条
    个人网站
    微信
    博客专栏