自定义view(二)
1.View 的绘制
通过继承View 并重写它的onDraw()来完成绘制。
onDraw()有一个参数,就是Canvas对象。使用这个Canvas就可以绘制图像了,Canvas canvas = new Canvas(bitmap);
创建一个Canvas 对象时,为什么要传进去一个bitmap 对象呢?
这是因为传进去的bitmap 与通过这个bitmap 创建的Canvas 画布是紧紧联系在一起的,这个过程我们称之为装载画布。
这个bitmap用来存储所有绘制在Canvas的像素信息。所以当你通过这种方式创建了Canvas 对象后,后面调用所有的Canvas.drawXXX 方法都发生在这个bitmap 上。
2.ViewGroup的测量
viewGroup会管理子view的大小。
当viewGroup的大小为warp_content时,viewGroup会遍历子view ,以便获取所有子view的大小,来决定自身的大小。-------->调用的是view的 measure的测量方法 【就是自定义view(一)提到的onMeasure】
如果是其他模式,则会通过指定值来设置自身的大小。
当子view的测量完毕以后,就需要将子view放到合适的位置,这个时候就是view的Layout的过程。ViewGroup在执行Layout的过程时,也会遍历view的Layout方法,并指定其具体显示位置。
3.viewGroup绘制
viewGroup通常不需要绘制,因为他本身就没有需要绘制的东西。如果不是指定viewGroup的背景颜色,连onDraw()方法都不会调。
但是ViewGroup会使用dispatchDraw()来绘制其子view,也是遍历子view,并调用子view的绘制方法。

自定义view(二)的更多相关文章
- Android自定义View (二) 进阶
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自定义View之旅,前面已经介绍过一个自定义View的基础的例 ...
- 自定义View(二)--继承自ViewGroup
自定义View包括很多种,上一次随笔中的那一种是完全继承自View,这次写的这个小Demo是继承自ViewGroup的,主要是将自定义View继承自ViewGroup的这个流程来梳理一下,这次的Dem ...
- Android 自定义View (二) 进阶
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24300125 继续自定义View之旅,前面已经介绍过一个自定义View的基础的例 ...
- 自定义View(二),强大的Canvas
本文转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android中使用图形处理引擎,2D部分是 ...
- Android 自定义View二(深入了解自定义属性attrs.xml)
1.为什么要自定义属性 要使用属性,首先这个属性应该存在,所以如果我们要使用自己的属性,必须要先把他定义出来才能使用.但我们平时在写布局文件的时候好像没有自己定义属性,但我们照样可以用很多属性,这是为 ...
- 自定义view(二)
这里是自定义view(二),上一篇关于自定义view的一些基本知识,比如说自定义view的步骤.会涉及到哪些函数以及如何实现自定义属性,同时实现了一个很基础的自定义控件,一个自定义的计时器,需要看的人 ...
- Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解
Android绘图机制(二)--自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形,圆 ...
- Android自定义View(二)
前言 魅族手机的闹钟应用中有个倒计时,这个控件还是蛮有趣的.左边是魅族闹钟,右边是我们最终实现的效果,虽然有些细节还需优化,不过基本上已经达到了想要的效果,我们先来就来看看如何实现吧. 分析 确定宽高 ...
- 【朝花夕拾】Android自定义View篇之(二)Canvas常用功能
前言 转在请申明,转自[https://www.cnblogs.com/andy-songwei/p/10960012.html],谢谢! 上一篇讲View的绘制流程中讲到过,最后一步是draw流程, ...
随机推荐
- Tween Animation----Translate位置移动动画
布局: 在res/下新建一个anim文件夹用来保存动画xml文件 新建一个translate文件 代码: <?xml version="1.0" encoding=" ...
- TPC-H
http://blog.csdn.net/leixingbang1989/article/details/8766047
- SOAPUI使用教程-REST服务和WADL
首先创建一个新的REST项目: 选择文件|新建项目REST从主菜单: 通常情况下,我们可能会只提供一个URI 点击导入消耗. 在新建项目消耗对话框: 点击浏览. 然后,我们可以浏览到该文件: 点击 ...
- Spring AOP详解
一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...
- Oldboy-Homework-Week1
关于Python全栈开发第一周所讲的一些回忆(会陆续添加) 一.一些简单的命令.概念 1.print(""):输出 2.变量 3.input():输入 4.while循环.if.e ...
- 苹果手机微信上form表单提交的问题
场景:前端页面请求后端php,返回带form表单dom元素,然后将其追在页面上,返回的html字段中包含表单自动提交的代码,想法是将带有表单自动提交的dom元素追加到页面上,然后表单自动提交到另外一个 ...
- BZOJ 2048 题解
2048: [2009国家集训队]书堆 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1076 Solved: 499[Submit][Status ...
- React-native之Alert
普通的alert 先看函数原型 alert: (title: string, message?: string, buttons?: AlertButton[], type?: string) =&g ...
- es6 数组的工具类
根据Es6中map和Set的特性,实现了对array的分组和转换操作. exports.mapToObj = function (strMap) { let obj = Object.create(n ...
- Docker Volume 之权限管理(转)
Volume数据卷是Docker的一个重要概念.数据卷是可供一个或多个容器使用的特殊目录,可以为容器应用存储提供有价值的特性: 持久化数据与容器的生命周期解耦:在容器删除之后数据卷中的内容可以保持.D ...