1、继承关系

2、组合关系

3、View 的绘制流程
3.1、创建R.attrs.styleable,申明需要用到的属性值,在使用时可以根据属性进行定义
 
3.2、extends View  ,依次添加构造方法
 
public A (Context context){this(context,null);}  
 
public A  (Context context,AttributeSet attrs){this(context,attrs,R.attr.Styleable);}
 
public A (Context context,AttributeSet attrs,int defStyleAttr){
super(context,attrs,defStyleAttr);
TypeArray attrsArray=context.getTheme().obtainStyledAttributes(attrs,R.styleable.Styleable,defStyleAttr,0);
……依次获取对应的属性
int viewColor=attrsArray.getColor(R.styleable.view_color,default_color);
float viewSize=attrsArray.getDimension(R.styleable.view_size,default_size);
int viewVisible=attrArray.getInt(R.styleable.view_visible,default_visible);
 
……
初始一些画笔工具等
 
attrsArray.recycle();           //注意回收该对象
3.3、控制View的大小 测量
      measure -> onMeasure();
      找出控件的大小
      测量工作在onMeasure方法进行
      onMeasure方法里面必须调用setMeasuredDimension();
      setMeasureDimension保存测量的宽高的值mMeasuredWidth,mMeasuredHeight 
3.4、控制View的位置 布局(一般不需要重写)
     onLayout()
     l, t ,r, b 相对于父容器
     layout->setFrame 完成对四个成员变量的赋值 mLeft ,mTop,mRight,mBottom
     父容器发起childView的布局,调用childview.layout(),传入四个位置
3.5、View绘制 
     draw->onDraw()
     要去实现onDraw方法绘制控件
 
4、ViewGroup的绘制流程
 
     ViewGroup继承自View,绘制流程遵循View的绘制流程
 
ViewGroup的测量
 
     相同点measure->onMeasure
     不同点:作为一个父View,需要去测量childView(child.measure),拿到childView设置的宽高,再设置父View的宽高满足调用
 
ViewGroup的布局
 
     相同点:layout(l,t,r,b)
     不同点:ViewGroup要去重写onLayout,调用childView.layout(),指定childView的位置
 
ViewGroup的绘制
 
     相同点:draw->onDraw()
     不同点:ViewGroup一般不用重写onDraw(),ViewGroup默认实现了dispaDraw()去绘制childView()
 
getWidth和getMeasuredWidth的区别
  getWidth = mRight - mLeft, mRight和mLeft只有layout->setFrame才有值
 getMeasuredWidth 测量之后才有值

View和ViewGroup的更多相关文章

  1. Android View和ViewGroup

    View和ViewGroup Android的UI界面都是由View和ViewGroup及其派生类组合而成的. 其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也 ...

  2. 自定义View和ViewGroup

    为了扫除学习中的盲点,尽可能多的覆盖Android知识的边边角角,决定对自定义View做一个稍微全面一点的使用方法总结,在内容上面并没有什么独特的地方,其他大神们的博客上面基本上都有讲这方面的内容,如 ...

  3. 自定义View_1_关于View,ViewGroup的测量和绘制流程

    自定义View(1) ------ 关于View,ViewGroup的测量和绘制流程 在Android当中,自定义控件属于比较高级的知识体系,今天我们就一起研究研究关于自定义View的那点事,看看它到 ...

  4. View、ViewGroup (转)

    Android原理揭秘系列之View.ViewGroup (转) Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGrou ...

  5. android 应用架构随笔四(View、ViewGroup)

    View表示了用户界面的基本构建模块. 一个View占用了屏幕上的一个矩形区域并且负责界面绘制和事件处理.手机屏幕上所有看得见摸得着的都是View. Activity是四大组件中唯一一个用来和用户进行 ...

  6. Android(java)学习笔记95:Android原理揭秘系列之View、ViewGroup

    作过Android 应用开发的朋友都知道,Android的UI界面都是由View和ViewGroup及其派生类组合而成的.其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器, ...

  7. android应用的界面编程----View与ViewGroup的概念

    1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...

  8. 自定义控件(视图)1期笔记01:View 和 ViewGroup

    1.View 和 ViewGroup 图解关系: 2. View 和 ViewGroup 关系和作用: (1) 关系: • 继承关系 • 组合关系 (2) 作用:      • View的作用: 提供 ...

  9. View,viewgroup,viewstub总结

    :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...

  10. Android界面的View以及ViewGroup的区别

    因为这个问题会经常成为面试的热点,所以我们来谈谈View以及ViewGroup的区别. 先看看View及ViewGroup类关系    Android View和ViewGroup从组成架构上看,似乎 ...

随机推荐

  1. Django:永别了pycrypto库~

    在开发微信登陆功能时,解密用户信息需要使用到 Crypto 包,所以安装了pycrypto库. Linux.OS X 系统均可直接 pip install pycrypto . 最近换到win10下开 ...

  2. linux 文件管理命令

    一,文件查看more,less,head,tail,cat,tac 分屏查看文件内容 more:和man用法一样,但翻屏到尾部自动推出. less:和man用法一样. head:查看文件的前n行.n默 ...

  3. java面向对象 - 匿名对象

    一.匿名对象 1. 创建的对象,没有显示的赋给一个变量名,即为匿名对象. 2. 匿名对象只能调用一次 二.匿名对象使用 class Phone { private int price; public ...

  4. 基于XML的开发

    基于XML的开发 1.定义一个切面类 /** * Created by zejian on 2017/2/20.*/ public class MyAspectXML { public void be ...

  5. 菜鸟刷面试题(四、Spring/Spring MVC/Spring Boot/Spring Cloud篇)

    目录: 为什么要使用 spring? 解释一下什么是 aop? 解释一下什么是 ioc? spring 有哪些主要模块? spring 常用的注入方式有哪些? spring 中的 bean 是线程安全 ...

  6. 面试连环炮系列(十一):说说你们的分布式ID设计方案

    说说你们的分布式ID设计方案 我们采用Snowflake算法,生成一个64bit的数字,64bit被划分成多个段,分别表示时间戳.机器编码.序号. 41位的时间序列(精确到毫秒,41位的长度可以使用6 ...

  7. C++之运算符优先级顺序表

    [注] sizeof 的操作数不能是 C 风格转型:表达式 sizeof (int) * p 无歧义地解释成 (sizeof(int)) * p ,而非 sizeof((int)*p). 条件运算符中 ...

  8. Netty如何监控内存泄露

    目录 Netty如何监控内存泄露 前言 JDK的弱引用和引用队列 Netty的实现思路 代码实现 分配监控对象 追踪和检查泄露 Netty如何监控内存泄露 前言 一般而言,在Netty程序中都会采用池 ...

  9. STM32F407外部晶体改为25M后检测不到芯片的解决办法

    问题描述 分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法.使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开 ...

  10. MySQL的表定义语法

    表定义 只有成功创建数据库后,才能创建数据表,数据表是字段的集合,在表中数据按行和列的格式存储 创建表 MySQL 使用 CREATE TABLE 创建表.其中有多个选择,主要由表创建定义(creat ...