Android重点知识——View和ViewGroup与自定义控件

作者:丁明祥
邮箱:2780087178@qq.com

一、基础

ViewGroup 参考资料:

Android 手把手教您自定义ViewGroup(一)

View参考资料:

Android 自定义View (一)系列

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:

在onMeasure()中计算childView的测量值以及模式,以及设置自己的宽和高。

解释一下测量模式:

EXACTLY:表示设置了精确的值,一般当childView设置其宽、高为精确值、match_parent时,ViewGroup会将其设置为EXACTLY;

AT_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;

还有一种,没想到在哪儿用,懒得写

在onLayout()中设置childView的绘制区域。

自定义View:

Android 中自定义View的主要步骤:

  1. 定义View的属性,res/values/attrs.xml,属性值类型包括string,color,demension,integer,enum,reference,float,boolean,fraction,flag。

  2. 在构造方法中获得定义好的样式属性

  3. 重写onMeasure(),获得我们自己设置的大小,当我们设置明确的宽度和高度时,系统帮我们测量的结果就是我们设置的结果,当我们设置为WRAP_CONTENT或者MATCH_PARENT,系统帮我们测量的结果就是MATCH_PARENT的长度。

所以,当设置了WRAP_CONTENT时,我们需要自己进行测量,即重写onMesure方法”

  1. 重写onDraw()将自定义的视图在屏幕上绘制出来。

  2. 在布局中使用自定义View。

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

3.深入Android中的View和ViewGroup

参考资料:

ViewGroup

Android群英传 第三章

Android中View绘制流程以及invalidate()等相关方法分析

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

1)ViewGroup由View继承而来,ViewGroup又是布局文件和View容器的基类

  • 在这个类里定义了ViewGroup.LayoutParams类,这个类是布局参数的子类。

2)ViewGroup是作为容器存在的,在该容器中可存放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来说其必须实现增、删、查的算法。

  • 增加
  • 移除
  • 查询

Android 中的View与ViewGroup的更多相关文章

  1. android中实现view可以滑动的六种方法续篇(二)

    承接上一篇,上一篇中讲解了实现滑动的第五种方法,如果你还没读过,可点击下面链接: http://www.cnblogs.com/fuly550871915/p/4985482.html 这篇文章现在来 ...

  2. Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

    UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...

  3. 详解实现Android中实现View滑动的几种方式

    注: 本文提到的所有三种滑动方式的完整demo:ScrollDemo 1. 关于View我们需要知道的 (1)什么是View? Android中的View类是所有UI控件的基类(Base class) ...

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

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

  5. Android中自定义View和自定义动画

    Android FrameWork 层给我们提供了很多界面组件,但是在实际的商业开发中这些组件往往并不能完全满足我们的需求,这时候我们就需要自定义我们自己的视图和动画. 我们要重写系统的View就必须 ...

  6. Android中父View和子view的点击事件的执行过程

    Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解.  一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...

  7. Android之UI View与ViewGroup

    1.基本概念 View:所有可视化控件的父类,Android App屏幕上用户可以交互的对象(例如 按钮 下拉框 文本框等). ViewGroup:View的子类,存放View和ViewGroup对象 ...

  8. android开发:Android 中自定义View的应用

    大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...

  9. android中自定义view构造函数ContentItemView(Context context, AttributeSet paramAttributeSet)的用处

    自己定义一个view <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

随机推荐

  1. smarty 3 + codeigniter 2 + hmvc

    参考资料 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/src/fecd39ccdf56?at=defau ...

  2. 页面footer在底部

    页脚动态贴在底部需要满足以下两个条件: 当主体的内容高度不超过可视区域高度的时候,页脚贴在页面底部. 当主体的内容高度超过可视区域高度的时候,页脚将按正常布局. 方法一:footer高度固定+绝对定位 ...

  3. (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

    http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...

  4. oc的属性

    Declared property A declared property provides a syntactical shorthand for declaring a class’s acces ...

  5. Django使用中常见的错误

    Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED   Django 执行makemigrations  的时候报错 ...

  6. Java解析导入Excel文件后台代码实现

    使用MultipartFile上传Excel文件后端代码实现:(springmvc下的spring-webmvc (MultipartFile )上传) 由于POST一个包含文件上传的Form会以mu ...

  7. Project Euler 28 Number spiral diagonals

    题意:给出一个 1001 × 1001 的矩阵,寻找每一圈四个顶点,并求出所有顶点的和 思路:只需要找到右上顶点数字的规律,然后每一圈四个顶点构成了一个等差数列,求个和即可 /************ ...

  8. 园区IP地址规划(非常详细)

    转:https://mp.weixin.qq.com/s/Zlm7x5eunIYLAG7Sp0yVCQ 经过这些年工作,接触从几万.几十万到上亿的项目都有: 我简单总结了接触的大部分的项目,将园区网核 ...

  9. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让a+b的和为100000000...0这样的形式就好了 这样s(a+b)=1<=m就肯定成立了(m>=1) 然后至于s ...

  10. SSM知识巩固2

    数据回显 1.springmvc默认对pojo数据进行回显. pojo数据传入controller方法后,springmvc自动将pojo数据放到request域,key等于pojo类型(首字母小写) ...