史上最全的贝塞尔曲线(Bezier)全解(二):Android中曲线的简单绘制
来源:互联网 发布:网络暴力 维基百科 编辑:程序博客网 时间:2024/06/05 00:32
上一篇中我简单的介(粘)绍(贴)了一下贝塞尔曲线(Bezier)曲线的原理和公式,但是作为数学界排的上名号的渣渣,我只能默默的溜过;
不过还好,android帮我们实现好了这个贝塞尔曲线的使用;
Path
这个类中封装了要使用贝塞尔曲线(Bezier)的简单方法;使用起来也很简单,总的来说也只有三步
- 初始化Path
mPath = new Path();
- path移动到起点
mPath.moveTo(startX, startY / 3);
- 确定直线的终点
mPath.lineTo(endX, endY / 3);
- 调用canvas绘制贝塞尔曲线
canvas.drawPath(mPath, mPaint);
好了,到这里一阶的一条直线就完成了;
但是这个完全没任何卵用啊,就一条直线有木有!!
但是,我们可以一直画下去,就像这样:
path.moveTo(touchX + getWidth() / 20, touchY - getHeight() / 10); path.lineTo(touchX + getWidth() / 20, touchY); path.lineTo(touchX - getWidth() / 20, touchY); path.lineTo(touchX - getWidth() / 20, touchY - getHeight() / 10); path.lineTo(touchX, touchY - getHeight() / 7); path.lineTo(touchX + getWidth() / 20, touchY - getHeight() / 10 + 2);
这段代码绘制完成之后就是一个随着手指一动的小火箭了
丑爆了有木有,不过还好,如果是大神的话应该可以绘制成一个比较好一些的了吧,主要还是原理,相对于自己直接画直线,已经大大简化了;
二阶曲线
二阶曲线在安卓中的定义也是很简单的,就是调用quadTo方法,
mPath.moveTo(startX, startY); mPath.quadTo(touchX, touchY, endX, endY); canvas.drawPath(mPath, mPaint);
不管是几阶的,都是要先moveTo到起点;
三阶曲线 ##
mPath.moveTo(pointFStart.x, pointFStart.y); mPath.cubicTo(pointFFirst.x, pointFFirst.y, pointFSecond.x, pointFSecond.y, pointFEnd.x, pointFEnd.y); canvas.drawPath(mPath, mPaint);
途中从下倒上,四个点依次是pointFStart,pointFFirst,pointFSecond,pointFSecond;根本没什么难度,非常简单,可以直接使用,上篇提到的”心”的移动就是按照这个轨迹进行移动,所以看起来十分顺滑,效果也不错;
贝塞尔曲线的绘制本身并没有什么难度,这些都是很基础的一些东西,但是却能实现一些很炫酷的效果,比如qq上的粘性控件的效果等,这些都可以实现;
好了,简单的使用就介绍到这里了,下一篇我会利用贝塞尔曲线实现一些炫酷的效果
最后附上源码:https://github.com/sangxiaonian/BezierIntroduce.git
0 0
- 史上最全的贝塞尔曲线(Bezier)全解(二):Android中曲线的简单绘制
- Bezier曲线的绘制
- Bezier曲线的绘制
- Bezier曲线的绘制
- Bezier曲线的动态绘制
- 史上最全的贝塞尔曲线(Bezier)全解(一):初识贝塞尔曲线
- 史上最全的贝塞尔曲线(Bezier)全解(三):贝塞尔曲线实现满屏爱心
- 绘制贝塞尔Bezier曲线
- 正确的Bezier曲线的绘制
- [转载] Hermite 与 Bezier 曲线的绘制
- Hermite 与 Bezier 曲线的绘制
- 计算机图形学-三次Bezier曲线的绘制
- android上Bezier曲线绘制
- bezier曲线的实现
- Android中使用Bezier曲线
- Android中使用Bezier曲线
- OpenGL绘制Bezier曲线
- Bezier曲线绘制方法
- nodejs--path
- Maximum Subarray
- Android 开发神器系列(工具篇)之 Android WiFi ADB
- Android 中的 Service 全面总结
- 实现最多输入20个汉字(英文算半个汉字,奇数个英文算一个汉字),超过20个汉字后不能输入
- 史上最全的贝塞尔曲线(Bezier)全解(二):Android中曲线的简单绘制
- jira的安装部署
- jquery.mobile-1.4.5.min.js:3 Uncaught TypeError: Cannot set property 'mobile' of undefined
- iOS 获取当前的ViewController
- Thrift objective C应用
- 使用Swiper实现无线滚动效果
- 爱与不爱
- 前端开发面试经典题献给大家!
- Pickers(选择器)