贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋。一般的矢量图形软件常利用贝塞尔曲线来精确画出曲线。
上面的介绍中,“线段像可伸缩的皮筋”这句话非常关键,但也特别好理解。至于贝塞尔曲线的详细内容大家可以查阅相关资料。
Android提供的贝塞尔曲线绘制接口
在Android开发中,要实现贝塞尔曲线其实还是很简单的,因为Android已经给我们提供了相关接口,但此接口方法被藏的有点深,藏于Path类中。此方法如下:
android.graphics.Path.quadTo(float x1, float y1, float x2, float y2)
Since: API Level 1
参数说明:
x1:操作点的x坐标
y1:操作点的y坐标
x2:结束点的x坐标
y2:结束点的y坐标
从API中看出,贝塞尔曲线从API-1就开始支持了。
Android贝塞尔曲线的绘制实例
熟悉方法后,下面就来实现:
SurfaceView框架不多讲,看过我博客的都应该知道的。
直接看MySurfaceView类,此类继承SurfaceView,是游戏的主视图。
这里为了更清晰的讲解:这里部分代码先不贴出来了,最后会整体贴出。
首先是定义相关的成员变量:
Java代码
// 贝赛尔曲线成员变量(起始点,控制(操作点),终止点,3点坐标)
private int startX, startY, controlX, controlY, endX, endY;
// Path
private Path path;
// 为了不影响主画笔,这里绘制贝赛尔曲线单独用一个新画笔
private Paint paintQ;
// 随机库(让贝赛尔曲线更明显)
private Random random;
本类构造函数:
Java代码
/**
* SurfaceView初始化函数
*/
public MySurfaceView(Context context) {
super(context);
...
//贝赛尔曲线相关初始化
path = new Path();
paintQ = new Paint();
paintQ.setAntiAlias(true);
paintQ.setStyle(Style.STROK