Android的APIDemos中有一个FingerPaint演示。 以下是手指在屏幕上移动时的代码。
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
mX = x;
mY = y;
}
}
我注意到这个演示使用mPath.quadTo我认为应该是mPath.lineTo,我试过了。以下是我的代码:
private void touch_move(float x, float y) {
float dx = Math.abs(x - mX);
float dy = Math.abs(y - mY);
if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
mPath.lineTo(x, y);
mX = x;
mY = y;
}
}
然后我再次尝试,似乎没有区别,为什么谷歌使用quadTo?
我在游戏程序中听说过,他们使用quadTo画手指画,但为什么呢? Plz帮助... thx
答案 0 :(得分:7)
使用二次线(基本上是某种椭圆)对曲线进行QUAD。 LineTo是一条直线。 QuadTo可以消除它们转向的锯齿状。
答案 1 :(得分:4)
根据http://developer.android.com/reference/android/graphics/Path.html:
quadTo(float x1,float y1,float x2,float y2) 从最后一个点添加二次贝塞尔曲线,接近控制点(x1,y1),并以(x2,y2)结束。 lineTo(float x,float y)从最后一个点到指定点(x,y)添加一条线。
看起来quadTo()基于一些二次函数或者换句话说,抛物线绘制一条曲线。 lineTo()只画一条直线。