自定义View绘制心得(自定义view和自定义viewGroup)
2016-03-09 21:17
204 查看
自定义View主要分为两大部分:
第一部分是view的绘制:
大体步骤
1.测量大小
2.放置位置
3绘制
第二部分是view事件处理:
主要是view滑动(7种):
通过ontouchListener()
1获取偏移()
2将偏移量放进位置方法中改变位置。
大部分自定义view基本分为以下
1.继承自view,2继承自viewGroup
测量
view的测量主要和父容器和自身的Layoutparms有关。
继承自view测量时当属性参数是WRAP_context时 需要重写onMeasure() 通过Measuresprc类的Mode和size,判断自行填写大小(覆写父类setMeasuredDimension(,))
而继承自ViewGroup类测量时。当属则需要通测量过子View大小从而重新决定自己的大小。(通常宽高可能是子view的和)。注意:只能获取的是测量值Measureheight.
放置
veiw放置方式 获取父布局layoutparams 或者layout()方法
viewGroup放置则先onLayout()方法对其中的子布局调用Layout()进行依次放置(getcount(),和getchildAt()获取子控件)
绘制
ondraw()方法中参提供了一个Canvas,这个Canvas系统提供了许多绘制API,例如drawPoint,drawline,drawPath,drawBitmap,drawshape等
同时提供了方法,这些方法为坐标点绘制计算提供方便,rotate()和traslate()分别对坐标原点进行角度转换和平移。Save,和restore对图层保存和合并,另外对图层的管理通过栈的方式。两个方法,saveLayer(),saveLayerALpha(),restoreTocount(),restore(),对图层操作后决定了后面的操作是在哪个图层上。
viewGroup注意:
viewGroup可用addview在构造函数中添加子控件或者布局。要注意的是子控件的点击事件可以通过新建一个接口的,在viewGroup中回调接口方法,同时给出一个方法暴露接口。这样调用者自己就可以在用viewGroup的暴露的接口实现自己的逻辑了。
第一部分是view的绘制:
大体步骤
1.测量大小
2.放置位置
3绘制
第二部分是view事件处理:
主要是view滑动(7种):
通过ontouchListener()
1获取偏移()
2将偏移量放进位置方法中改变位置。
大部分自定义view基本分为以下
1.继承自view,2继承自viewGroup
测量
view的测量主要和父容器和自身的Layoutparms有关。
继承自view测量时当属性参数是WRAP_context时 需要重写onMeasure() 通过Measuresprc类的Mode和size,判断自行填写大小(覆写父类setMeasuredDimension(,))
而继承自ViewGroup类测量时。当属则需要通测量过子View大小从而重新决定自己的大小。(通常宽高可能是子view的和)。注意:只能获取的是测量值Measureheight.
放置
veiw放置方式 获取父布局layoutparams 或者layout()方法
viewGroup放置则先onLayout()方法对其中的子布局调用Layout()进行依次放置(getcount(),和getchildAt()获取子控件)
绘制
ondraw()方法中参提供了一个Canvas,这个Canvas系统提供了许多绘制API,例如drawPoint,drawline,drawPath,drawBitmap,drawshape等
同时提供了方法,这些方法为坐标点绘制计算提供方便,rotate()和traslate()分别对坐标原点进行角度转换和平移。Save,和restore对图层保存和合并,另外对图层的管理通过栈的方式。两个方法,saveLayer(),saveLayerALpha(),restoreTocount(),restore(),对图层操作后决定了后面的操作是在哪个图层上。
viewGroup注意:
viewGroup可用addview在构造函数中添加子控件或者布局。要注意的是子控件的点击事件可以通过新建一个接口的,在viewGroup中回调接口方法,同时给出一个方法暴露接口。这样调用者自己就可以在用viewGroup的暴露的接口实现自己的逻辑了。
相关文章推荐
- iOS公司开发者账号申请
- 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类
- 算法题:数组合并问题的解法
- 欢迎使用CSDN-markdown编辑器
- zjnu1709 UZASTOPNI (bitset,树形dp)
- 目标检测之HOG特征
- 问题之htslib安装时没有zlib
- c++多线程编程(三)
- Floyd算法(弗洛伊德算法) 百度百科
- DropDownMenu下拉筛选排序Menu
- ubuntu技巧--ubuntu下升级cmake
- 小试牛刀
- Treasure the new start, freshmen!
- Floyd算法(弗洛伊德算法) 百度百科
- 实习一周总结
- Android新手入门2016(5)--HelloWorld工程结构分析
- HTML5中没有cellspacing和cellpadding怎么办
- Android--持久化技术
- c++多线程编程(二)
- 二进制基础