自定义view

自定义view是开发人员必须掌握的最重要技能之一。对于继承自view类的自定义控件来说,核心的步骤分别为尺寸测量和绘制,对应的函数是onMeasure、onDraw。过程如下:继承自view创建自定义控件;如有需要自定义view属性,也就是在values/attrs.xml中定义属性集;在xml中引入命名控件,设置属性;在代码中读取xml中的属性,初始化视图;测量视图大小;绘制视图内容;在视图树渲染时view系统的绘制流程会从ViewRoot的performTraversals方法中开始,在其内部调用view的measure方法。measure方法接收两个参数:withMeasureSpec和heightMeasureSpec,这两个值分别用于确定视图的宽度、高度的规格和大小。MeasureSpec的值由specSize和specMode共同组成。这两个MeasureSpec是从整个视图树的控制类ViewRootImpl创建的。根视图总是充满全屏的。
当构建完根视图的MeasureSpec之后就会执行performMeasure函数从根视图开始一层一层测量视图的大小。最终会调用每个View的onMeasure函数,在该函数中用户需要根据MeasureSpec测量view的大小,最终调用setMeasuredDimension函数设置该视图的大小。view的测量是自定义view中最为重要的一步。
对于android来说,整个view就是一张画布,也就是Canvas。开发人员可以通过画笔Paint在这张画布上绘制各种各样的图形、元素。Canvas和Paint有很多重要的函数,在onDraw方法里我们经常会看到调用Canvas的save和restore方法,这两个函数很重要。有的时候我们需要使用 Canvas来绘制一些特殊的效果,在做一些特殊效果之前,我们希望不保存原来的Canvas状态,此时需要调用Canvas的save函数。执行save函数之后,可以调用Canvas的平移、放缩、旋转、skew、裁剪等操作。然后再进行其他的绘制操作。当绘制完毕之后,我们需要调用restore函数来恢复Canvas之前保存的状态。
自定义ViewGroup是另一种重要的自定义view形式,当我们需要自定义子视图的排列方式时,通常需要通过这种形式实现。通过使用Scroller使得整个滚动效果更加平滑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值