2

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.lineTo 的 mPath.quadTo,我试过了。下面是我的代码:

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 来绘制手指画,但为什么呢?请帮助...谢谢

4

2 回答 2

8

使用二次线(基本上是某种椭圆)的四边形曲线。LineTo 是一条直线。QuadTo 将在它们转动的地方平滑锯齿。

于 2013-04-08T14:49:10.207 回答
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() 只是画一条直线。

于 2013-04-08T14:54:01.947 回答