一 什么是自定义view
1 首先来看一张图
这张图就是 我们Activity中ui的层级关系 从上图就可以知道,我们平时使用的 setContentView() 这个方法就是用来设置 contentview 。
2 我们来看看第二种图
从上面的一张图中,我们可以看出 android 的 UI 控件主要有两种:view 和 viewgroup。那么像我们经常使用的 Button,TextView,ImageView 都属于 view 的范畴!FrameLayout,LinearLayout等都属于 viewgroup 的范畴!
3 什么是自定义Veiw
自定义view就是继承 View 或者继承ViewGroup 又或者继承已有的控件比如 button textView 等 在这些上面进行拓展。
二 为啥要定义view
1 特定的显示风格
系统提供的控件或者没有提供的控件 达不到我们app的统一显示风格,需要我们自定义view实现。
2 处理特有的用户交互
我们需要自定义View实现 特殊的操作交互。比如 移动 删除 变色等。
3 优化我们的布局。
比如在ListView中可以通过自定义view实现复杂的自定义布局减少渲染的次数。
4 封装
有些功能和显示效果 ,在大多数app上都可以复用 比如一个开关按钮 ,我们将 自定义view 封装起来 就可以随时 复用。
三 如何自定义View
1 自定义属性的声明与获取。
2 测量方法 onMeasure。
3 布局方法 onLayout。(只有在继承ViewGroup时,才重写)
4 绘画方法 onDraw。
5 触摸方法 onTouchEvent。(处理用户交互)
6 触摸拦截方法 onInterceptTouchEvent(继承viewGroup时处理交互拦截事件)
7 状态的恢复 与保存。
四 实现自定义veiw的三种方式。
1 组合控件
组合控件,顾名思义就是将一些小的控件组合起来形成一个新的控件,这些小的控件多是系统自带的控件。比如很多应用中普遍使用的标题栏控件,其实用的就是组合控件。
2 继承控件
就是继承已有的控件,创建新控件,保留继承的父控件的特性,并且还可以引入新特性。比如自定义 带有清空功能的EditText 列表可以横向滑动删除的listView 。
3 自绘控件
自绘控件的内容都是自己绘制出来的,在View的onDraw方法中完成绘制。比如仿 ios7的滑动开关
仿 摩托车的仪表盘