Android实现自定义View的方法

  1. 多个控件组合成一个新的控件,比如继承LineaLayout;

  2. 继承View控件,根据View的绘制流程重新进行实现;

另外,我们实现自定义View的好处有哪些呢?

自定义View实际上也就是一个功能类,除了绘制UI以外,还可以封装一定的业务逻辑,这样我们只需要对外提供一些接口,调用方就像使用其它类一样调用即可。

举个例子,我们常见的adapter的item布局中:

在这里插入图片描述

左边的图片和右边的文字可以做成一个新的View控件,这样如果调用的地方多了,可以节省不少的代码量,因为实现的逻辑都在新的控件中处理了。

这个也就是我们平时对UI进行重构所用到的方法之一了。很多项目接手过来时,里面的UI代码可能都是从一个地方实现后,拷贝到另一个地方使用。没有进行View控件封装的后果就是代码冗余,阅读困难,而且View的功能如果要变动的话,所有调用的地方都得变动。严重违背代码设计的开闭原则。

View绘制流程

=================================================================

  1. measure()

作用:测量View的宽高

相关函数:measure(),setMeasuredDimension(),onMeasure()

  1. layout()

作用:计算当前View和子View的位置

相关函数:layout(),onLayout(),setFrame()

  1. draw()

作用:绘制View图形

相关函数:draw(),onDraw()

用一种很形象的说法来说明View的绘制:

meaure决定用多大的盘子装菜,layout决定怎么摆盘好看,而draw就是服务员,把上面的东西给客人摆好。

坐标系

============================================================

借用网络图片说明这个问题,对我们绘制UI理解有帮助:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值