Android控件架构与自定义控件详解

基于 《android 群英传 》的读书笔记


View的测量—onMeasure()

测量的模式可以有以下三种:

EXACTLY

即精确值模式,当我们将控件的layout_width属性或layout_height属性指定为具体参数值时,系统使用的就是EXACTLY

AT_MOST

即最大值模式,当控件的layout_width属性或layout_hright属性是warp_content时,控件大小一般随着控件的子控件或内容的变化而变化,此时控件尺寸只要不超过父控件允许的尺寸即可

UNSPECIFIED

不指定其大小的测量模式,view想多大就多大,通常情况下在绘制view时才会使用。

view类默认的onMeasure()方法只支持EXACTLY的模式,所以如果在自定义控件的时候不重写onMeasure()方法的话,就只能使用EXACTLY模式


View 的 绘制——onDraw()

要想在android的界面上绘制相应的图像,就必须在Canvas上进行绘制。Canvas就像是一个画板,使用paint就可以在上面作画了。

一般情况下,可以使用重写view类中的onDraw()方法来绘图,onDraw()中有一个参数,就是Canvas canvas对象,使用这个对象就可以进行绘图。


ViewGroup的测量

viewgroup回去管理其子view,其中一个管理项目就是负责子view的显示大小。当viewgroup的大小为warp_content时,viewgroup就需要对子view进行遍历,以便获得所有子view 的大小,从而决定自己的大小,而在其他模式下会通过具体的指定来设置自身的大小

viewgroup在测量时通过遍历所有的子view,从而调用子view的Measure方法来获得每一个子view的测量结果,前面所说的对view的测量,就是这里执行的。


ViewGroup的绘制

viewgroup通常情况下不需要绘制,因为它本身没有需要绘制的东西,如果不是指定viewgroup的背景颜色,那么viewgroup的onDraw()方法都不会被调用。但是,viewgroup会使用dispatchDraw()方法来绘制其子view,其过程同样是通过遍历所有的子view,并调用子view的绘制方法来完成绘制工作。


自定义view

在自定义View时,我们通常回去重写onDraw()方法来绘制view的显示内容。如果该view还需要使用wrap_content属性,那么还必须重写onMeasure()方法。另外,通过自定义attrs属性,还可以设置新的属性值。

对现有控件的扩展

  1.对TextView进行扩展
  2.闪动的文字效果

创建复合控件

  TopBar
  1.定义属性
    系统提供了TypedArray这样的数据结构来获取自定义的属性集--通
    过一个方法,将你在atts.xml中定义的declare-styleable的所有
    属性的值存储到TypedArray中。需要注意的是,当获取完所有属性
  2.组合控件
  3.引用UI模板
    在引用前必须指定引用第三方控件的名字空间。

View来实现全新的控件

  创建一个自定义view的难点在于绘制控件和实现交互。
  通常需要继承View类,并重写它的onDraw(),onMeasure()等方法来
  实现绘制逻辑,同时需要重写onTouchEvent()等触控事件来实现交互
  逻辑

自定义ViewGroup

  侧滑效果
时间: 2024-10-20 08:02:04

Android控件架构与自定义控件详解的相关文章

Android控件架构与自定义控件详解(二)——自定义View

在自定义View时,我们通常会去重写onDraw()方法来绘制View的显示内容.如果该View还需要使用wrap_content属性,那么还必须重写onMeasure()方法.另外,通过自定义attrs属性,还可以设置新的属性配置值. 在View中通常有一些比较重要的回调方法. onFinishInflate():从XML加载组件后回调. onSizeChanged(;:组件大小改变时. onMeasure():回调该方法来进行测量. onLayout():回调该方法来确定显示的位置. onT

Android 控件架构与自定义控件详解

架构: PhoneWindow 将一个 DecorView 设置为整个应用窗口的根 View,这里面所有 View 的监听事件,都通过 WindowManagerService 来接收.DecorView 分为 TitleView 和 ContentView,ContentView 是一个 ID 为 content 的 FrameLayout 在 onCreate() 方法中调用 setContentView() 方法后,ActivityManagerService 会回调onResume() 

第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析

1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根View,DecorView将屏幕分成两部分:TitleView和ContentView.ContentView实际上是一个FrameLayout,里面容纳的就是我们在xml布局文件中定义的布局. 为什么调用requestWindowFeature()方法一定要在setContentView()方法调

ListView(1)控件架构与ArrayAdapter详解

ListView是Android开发中比较常用的一个组件,它以列表的形式展示信息,并能根据信息的长度自适应显示.比如说我们手机里的通讯录就用到了ListView显示联系人信息.在大量的场合下,我们都需要使用这个控件.虽然在Android 5.0时代,RecyclerView在很多地方都在逐渐取代ListView,但ListView的使用范围依然非常的广泛.我们也不能跳过ListView直接去学习RecyclerView,对ListView的透彻理解是十分有必要的. 首先来看ListView在Vi

Android读书笔记3:控件架构以及自定义控件

安卓平台上这么多多姿多彩的控件是怎么制作出来的?有系统自定义的,也有开发者在系统的基础上进行自定义的.但是他们一定都遵循一定的规则,那就是android对于控件的架构设计. 言简意赅地说下:1.所有的控件都有 共同的父类,要么父类是View,要么父类是ViewGroup,顾名思义,后者意思是View的群组,前者是单个控件.有一个概念叫做控件树,即 所有的控件如果画成结构图,一定是一个树状结构图,我们activity里面用的findViewById就是按照树的深度优先遍历来查找对应的view( 从

使用appearance proxy定制控件的默认外观(详解)

控件的外观,受到tint color,background image, background color等属性的共同影响,通常要修改某个控件对象的外观,就去调用上面属性的相关setter方法(或者其他可以修改它们的方法)就可以了.但是,如果希望整个app中的控件都保持一致的风格,比如所有button的风格(指的是大小,背景图,形状等)都一样,那么一个一个去重复设置每个button的风格,就显得太麻烦了.如果可以给Button类设定一个默认外观,就方便多了.appearance proxy就可以

OpenLayers 之 控件(control)详解

每一个地图应用都应该有一些工具方便用户控制地图的行为,比如缩放,全屏,坐标控件等等,在 OpenLayers 中怎么添加这些工具呢?下面我给大家介绍一下 OpenLayers 中包含的控件种类,并介绍其使用方法.对控件的定制化,和对 OpenLayers 增加控件和优化控件等超出了本文范围. 一.control 类 OpenLayers 中的控件是由 control 类定义的,这是一个虚基类,不负责实例化特定的控件,它的主要作用是让其他具体的种类的控件类实现继承.OpenLayers 中包含的控

【React Native开发】React Native控件之WebView组件详解以及实例使用(22)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50676379 本文出自:[江清清的博客] (一)前言 [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 今天我们一起来看一下WebView组件讲解以及使用实例 刚创建的React Native技术交流群(282693535),欢迎各位大牛,React Native技术爱好者加入交流!同

Android视图控件架构分析之View、ViewGroup

在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点.在控件树中,以树的深度来遍历查找对应的控件元素,同时,上层控件负责子控件的测量与绘制,并传递交互事件. Android控件树: AndroidUI界面架构图: 一.测量View的工具类:MeasureSpec 1.MeasureSpec包含了测量的模式和测量的