本文主要讲解如何在 Android 下实现高仿 iOS 的开关按钮,并非是在 Android 自带的 ToggleButton 上修改,而是使用 API 提供的 onDraw、onMeasure、Canvas 方法,纯手工绘制。基本原理就是在 Canvas 上叠着放两张图片,上面的图片根据手指触摸情况,不断移动,实现开关效果。
效果图:
功能点:
不滑出边界,超过一半自动切换(边界判断)
可滑动,也可点击(事件共存)
提供状态改变监听(设置回调)
通过属性设置初始状态、背景图片、滑动按钮(自定义属性)
Android 在绘制 View 时,其实就像蒙上眼睛在画板上画画,它并不知道应该把 View 画多大,画哪儿,怎么画。所以我们必须实现 View 的三个重要方法,以告诉它这些信息。即:onMeasure(画多大),onLayout(画哪儿),onDraw(怎么画)。
未设置点击事件 | 是否监听 ACTION_MOVE | ||
---|---|---|---|
[Java] 查看源文件 复制代码
|
当从布局文件创建时调用,做一些初始化的操作,如创建对象等 | ||
[Java] 查看源文件 复制代码
|
当尺寸改变时调用,做一些进一步的初始化,如:处理外部通过 set 设置的属性 | ||
[Java] 查看源文件 复制代码
|
当需要测量时调用,指定 View 的大小 | ||
[Java] 查看源文件 复制代码
|
当需要布局时调用,指定 View 的位置 | ||
[Java] 查看源文件 复制代码
|
当需要绘制时调用,指定 View 的内容 |
在动手写之前,必须先了解以下几个概念:
View 的默认不支持 WRAP_CONTENT,必须重写 onMeasure 方法,通过 setMeasuredDimension() 设置尺寸
基本的事件分发机制:onClickListener 一定是在 onTouchEvent 之后执行
自定义 View 一般遵循如下流程: