码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2016-05-12 19:18:07      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

基于 《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

  侧滑效果

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

标签:

原文地址:http://blog.csdn.net/qq_31179919/article/details/51353464

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!