自定义有动画的Switch控件
效果图
需求分析
我们需要一个类型Android Switch的功能,但是系统带有的有点丑,我们自己自定义一个带有动画的Switch,完全使用自定义View实现,他是可以根据手势进行move,以及过半时候的颜色装换
实现分析
首先,我们需要线条和圆的未打开和已经打开的状态颜色,圆的半径,线条的宽度,已经是否是打开状态这几个属性,定义如下
1 | <declare-styleable name="TransitionSwitchViewStyle"> |
代码实现思路
我们需要重写onTouchEvent,同时需要返回true,然后move和up事件得以响应。
对于线条而言,他的起始点事固定的,宽度自己定义,改变的知识颜色,所以我们的一些东西不要在onMeasure中去初始化,不然重绘的时候会执行多次,影响效率。
对于圆而言,他的y坐标也是固定的 改变的是x位置和颜色,所以,我们需要在touch事件同不断改变x,同时重绘view,需要注意的是,同时我们需要判断当前touch的位置,是否过半了,假如是过半了我们就要改变线条和圆的颜色。
核心代码具体实现
首先是继承View
初始化方法,获取属性值和初始化画笔
1 | private void init(Context context, AttributeSet attrs, int defStyleAttr) { |
onMeasure方法,因为他在重绘阶段是不会再次调用的,我们需要在里面去初始化一些定了就不会变的东西,而onDraw方法是每次都会被调用,所以不适合。
1 | @Override |
onDraw方法:
1 | @Override |
最重要的onTouch方法如下:
1 | @Override |
还有一个难点就是如何去画在ActionUP之后的动画,我们首先在onAction Up之后判断他时候有必要,比如当前已经在两边定点了
画动画的方法:
1 | /** |
这样子我们就完成了自定义Switch空间的完整流程。
测试代码
1 | <com.liweijie.view.silmpleswitchbtn.TransitionSwitchView |