在手指画的情况下,Path.quadTo和Path.lineTo之间有什么区别?

时间:2013-04-08 14:41:36

标签: android graphics drawing

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

2 个答案:

答案 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()只画一条直线。