Android 自定义view

原创 2015年07月06日 16:15:57

View和ViewGroup

View为所有图形的基类,ViewGroup对view继承扩展为视图容器类

View绘图的基本操作

View绘图由3个函数完成:measure()、layout()、draw(),其中又分别包含onMeasure(),onLayout(),onDraw()三个子方法。

measure主要用于计算视图的大小,即视图的宽度和长度。measure()定义为final,子类不能修改,但是measure又会调用onMeasure(),子类通过复写onMeasure()实现自己的计算视图,并通过setMeasureDimension()来保存计算结果。

layout来设置视图在屏幕中显示的位置,在view中定义为final,子类不能修改。layout中有两个基本操作:

-setFrame(l, t, r, b),l,t,r,b即为子视图在父视图中的具体位置。

-onLayout()在view中为空,该函数主要为ViewGroup类型布局子视图

draw操作利用前两部分得到的参数,将视图显示在屏幕上。draw内部定义了绘图的基本操作:

  1. 绘制背景
  2. 如果要视图显示渐变框,这里会做一些准备工作
  3. 绘制视图本身,即调用onDraw()函数。在view中onDraw()是个空函数,具体的视图都要复写该函数来实现自己的显示,对于viewGroup则不需要实现该函数。
  4. 绘制子视图,即dispatchDraw()函数。在view中是个空函数,具体的视图不需要实现该方法,它是专门为容器类准备的,也就是说容器类必须实现该方法。
  5. 如果需要(应用程序调用了setVerticalFadingEdge或者setHorizontalFadingEdge),开始绘制渐变框
  6. 绘制滚动条

所以绘制自定义view最少需要onMeasure()和onDraw()两个方法

自定义控件的3种主要实现方式
  1. 继承已有的控件来实现自定义控件:主要是当要实现的控件和已有的控件在很多方面比较类似,通过对已有的控件的扩展来满足要求。
  2. 通过继承一个布局文件实现自定义控件,一般来说做组合控件时可以通过这个方式来实现。注意:此时不用onDraw()方法,而是在构造方法中通过inflate加载自定义控件的布局,再addView(),自定义控件的图形界面就加载进来了。
  3. 通过继承view类来实现自定义控件,使用GDI绘制出组件界面。

这3种方法体现在自定义控件的3个构造方法上。

自定义view增加属性的2种方法
  1. 在view类中定义。通过构造函数引入的attributeSet去查找XML布局的属性名称,然后找到它对应引用的资源ID去找值。
  2. 通过XML为view注册属性。与Android提供的标准属性写法一致。

自定义view常用的方法

  • onFinishFlate() 回调方法,当应用从xml加载组件并用它构建界面之后调用的方法
  • onMeasure() 检测view组件及其子组件的大小
  • onLayout() 当该组件需要分配其子组件的位置、大小时调用
  • onSizeChange() 当组件大小被改变时
  • onDraw() 当组件将要绘制它的内容时
  • onKeyDown
  • onKeyUp
  • onTouchEvent 当发生触屏事件时
  • onWindownFocusChange(bool) 当该组件得到、失去焦点时
  • onAtrrachedToWindow() 当把该组件放入到某个窗口时
  • onDetachedFromWindow() 当把该组件从某个窗口上分离时触发的方法
  • onWindowVisibilityChanged(int): 当包含该组件的窗口的可见性发生改变时触发的方法

Android自定义View

  • 2016年01月05日 17:54
  • 1.26MB
  • 下载

【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式

【Android自定义View实战】之仿百度加载动画,一种优雅的Loading方式 无意中看到了百度的加载动画,看起来非常优雅,打算亲手造一个。 仿百度加载动画的重要思路:当第一遍执行完毕后就让...

Android自定义View(一) -源码

  • 2016年08月26日 13:32
  • 34.14MB
  • 下载

android 自定义view 之 动态音频图 (二)

android 自定义view 之 动态音频图 (二)

Android 自定义View --- 视频音量调控

  • 2017年09月11日 17:38
  • 1.44MB
  • 下载

android学习之自定义view(一)

  • 2015年08月21日 00:11
  • 1.42MB
  • 下载

Android 自定义view实现贝塞尔曲线

android开发中动画有多么重要,相信大家都清楚。它可以让一个枯燥乏味的静态界面变成一个充满动力的动画世界,提高用户体验。反正现在都是用户体验至上。android也是前端。 废话不多少。直接上效果...

android自定义view(一)源码

  • 2017年06月21日 11:34
  • 22.06MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 自定义view
举报原因:
原因补充:

(最多只允许输入30个字)