Android重点知识——ViewViewGroup与自定义控件

作者:丁明祥
邮箱:[email protected]

一、基础

1.概念

Android中的View包含用户交互和显示,ViewGroup继承自View,主要充当View的容器。

ViewGroup和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递。

2.在自定义控件时继承ViewGroup和View的区别(这个地方上次面试被坑了一把)

测量:onMeasure() 设置自己显示在屏幕上的宽高(自定义View中不一定要用,在ViewGroup中使用到)
布局:onLayout() 设置自己显示在屏幕上的位置(自定义View中一定不实用,只有在自定义ViewGroup中用到)
绘制:onDraw() 在显示屏幕中绘制(自定义View中一定使用到,但自定义Viewgroup时不需要)

自定义ViewGroup:

自定义View:

二、深入(这一部分可能还要长期修改,)

3.深入Android中的View和ViewGroup

要理解Android中的View和ViewGroup必须要理解,

在我们写Android布局文件的时候,会告诉布局文件(容器)我们的View的宽度,高度,对齐方式,margin等,所以:

  1. ViewGroup的职能为:给childView计算出建议的宽和高和测量模式 ,决定childView的位置。
  2. View的职责,根据测量模式和ViewGroup给出的建议的宽和高,计算出自己的宽和高,同时在ViewGroup中绘制。

从API角度来看:

  • View的根据ViewGroup传人的测量值和模式,对自己宽高进行确定(onMeasure中完成),然后在onDraw中完成对自己的绘制
  • ViewGroup需要给View传入view的测量值和模式(onMeasure中完成),而且对于此ViewGroup的父布局,自己也需要在onMeasure中完成对自己宽和高的确定。此外,需要在onLayout中完成对其childView的位置的指定。
3.1 作为容器的ViewGroup

ViewGroup是一个容器,其采用一个数组来存储这些子View 实现private View[] mChildren;

3.2 ViewGroup中的增删查算法

由于是通过一个数组来存储View数据的,所以对于ViewGroup来说其必须实现增、删、查的算法。

  • 增加
  • 移除
  • 查询
05-11 09:31