自定义View
2016-01-13 18:56
225 查看
下面的内容是我在观看完慕课网的一个课程后所写的关于自定义View的学习
视图组件(View)
android中view类是最基本的UI类,高级UI组件继承View类而实现的,这里的UI是指user interface,即用户界面。我们使用的TextView,Button,List,EditText,RadioButton等都是View类。
一个View在屏幕中占据了一块矩形区域,它负责渲染这块矩形区域(如改变这块区域的颜色),也可以处理这块矩形区域发生的事件(如用户单击了这块区域),可以设置这块区域是否可见,是否可以获取焦点。
android API中对View的解释如下:
好了,下面进入本文的主题,如何自定义View
我们都知道Android中给我们提供了很不错的风格,但是有时候还是需要满足特定的风格,处理特有的用户交互,优化布局和封装,这些都需要我们采取自定义View。
如何自定义View呢?
1.自定义属性的声明与获取
1.1分析需要的自定义属性
1.2在res/values/attrs.xml定义声明
1.3在layout的xml文件中定义声明
1.4在View的构造方法中进行获取。而获取主要是通过context.obtainstyled Attributes(),获取完成后记得recycle.
2.测量OnMeasure
测量的模式分三个:
①EXACTLY:明确的值(如100dp)
②AT_MOST:至多不能超过某值(wrap_content)
③UNSPECIFIED:不限制;主要在ScrollView和ListView中。
下面是API中关于onMeasure方法的说明
3.布局onLayout(ViewGroup)
3.1决定子view的位置
3.2尽可能将onMeasure中一些操作移动到此方法中
3.3requestLayout()用来触发
4.绘制onDraw
4.1绘制内容区域
4.2invalidate,postInvalidate()
4.3Canvas.drawxxx
4.4 translate、rotate、scale、skew
4.5 save()、restore()
5.onTouchEvent
5.1 ACTION_DOWN
ACTION_MOVE
ACTION_UP
5.2ACTION_POINTER_DOWN
ACTION_POINTER_UP
5.3 parent.requestDisallow-InterceptTouchEvent(true)
5.4 velocityTracker
下面看看Android API中对onTouchEvent的介绍
6.onInterceptTouchEvent(ViewGroup)
6.1 ACTION_DOWN
ACTION_MOVE
ACTION_UP
6.2 ACTION_POINTER_DOWN
ACTION_POINTER_UP
6.3决定是否拦截手势
视图组件(View)
android中view类是最基本的UI类,高级UI组件继承View类而实现的,这里的UI是指user interface,即用户界面。我们使用的TextView,Button,List,EditText,RadioButton等都是View类。
一个View在屏幕中占据了一块矩形区域,它负责渲染这块矩形区域(如改变这块区域的颜色),也可以处理这块矩形区域发生的事件(如用户单击了这块区域),可以设置这块区域是否可见,是否可以获取焦点。
android API中对View的解释如下:
好了,下面进入本文的主题,如何自定义View
我们都知道Android中给我们提供了很不错的风格,但是有时候还是需要满足特定的风格,处理特有的用户交互,优化布局和封装,这些都需要我们采取自定义View。
如何自定义View呢?
1.自定义属性的声明与获取
1.1分析需要的自定义属性
1.2在res/values/attrs.xml定义声明
1.3在layout的xml文件中定义声明
1.4在View的构造方法中进行获取。而获取主要是通过context.obtainstyled Attributes(),获取完成后记得recycle.
2.测量OnMeasure
测量的模式分三个:
①EXACTLY:明确的值(如100dp)
②AT_MOST:至多不能超过某值(wrap_content)
③UNSPECIFIED:不限制;主要在ScrollView和ListView中。
下面是API中关于onMeasure方法的说明
3.布局onLayout(ViewGroup)
3.1决定子view的位置
3.2尽可能将onMeasure中一些操作移动到此方法中
3.3requestLayout()用来触发
4.绘制onDraw
4.1绘制内容区域
4.2invalidate,postInvalidate()
4.3Canvas.drawxxx
4.4 translate、rotate、scale、skew
4.5 save()、restore()
5.onTouchEvent
5.1 ACTION_DOWN
ACTION_MOVE
ACTION_UP
5.2ACTION_POINTER_DOWN
ACTION_POINTER_UP
5.3 parent.requestDisallow-InterceptTouchEvent(true)
5.4 velocityTracker
下面看看Android API中对onTouchEvent的介绍
6.onInterceptTouchEvent(ViewGroup)
6.1 ACTION_DOWN
ACTION_MOVE
ACTION_UP
6.2 ACTION_POINTER_DOWN
ACTION_POINTER_UP
6.3决定是否拦截手势
相关文章推荐
- php中奖概率算法,可用于刮刮卡,大转盘等抽奖算法
- 数据结构与算法分析-索引
- iOS真机运行,出现process launch failed: Security 错误
- Linux java环境搭建
- 匿名内部类
- Java [Leetcode 101]Symmetric Tree
- 修改标题栏和手机通知栏颜色相同
- winform程序是否重复运行
- MySQL limit分页查询优化写法
- 再次挖坑
- (转)android头像设置:从本地照片库或拍照获取并剪裁
- android studio gradle 打包
- 期末复习小体悟 第九章:查找 第14周导学案
- Kafka Connect
- LayoutInflater用法矫正
- 千与千寻-成长的故事
- String代码示例
- MP4文件格式简要解析
- Fragment介绍
- ffmpeg x264 x265 控制台命令显示重定向到log文件