概述
关于自定义View的话,这里先给自己标注一下,用于以后方便查看,介绍一个技术博主的技术博客HenCoder
今天我们尝试用贝瑟尔曲线自定义一个控件,效果如下:
是不是有种似曾相识的感觉,没错啦,就是QQ消息拖拽的效果。
如果还有人不太了解贝瑟尔曲线,可以拼命戳我,里面介绍的很详细。
具体实现:
首先看下这个图:
可以看出这里涉及到一些三角函数方面的数学知识,我们都可以用代码的形式把它表述出来。以下:
1.先有一个拖动大圆c1的圆心,和一个固定小圆c0圆心。我点击屏幕的地方就是两个圆的圆心,获取圆心:
|
|
2.拖拽大圆的半径不变的,我们可以写死,不动小圆的半径时根据两圆心的距离的变化而变化的,然后在onDrew()方法里绘制这两个圆
3.接下来最重要的一点是获取四个点(p0,p1,p2,p3)的坐标,先求出a的角度,小圆半径有了,然后就能得到x,y的值了,我们知道x,y和角度a的关系是:tan a = x/y。
求角度a
求p0(x,y),这里需要注意一下的是,屏幕的坐标系x轴向右是正方向,但是y轴的是向下才是正的。所以,
同理我们就能求出p1,p2,p3点了
4.控制点
5.所有东西都准备好就可以把路径画出来了,就是把p0,p1,p2,p3围起来。
6.最后我们在布局文件中使用
总结
关键点是在于求p0,p1,p2,p3四个点的位置,源码戳我