2013-04-08 70 views
1

在Android的APIDemos中有一個FingerPaint演示。 下面是手指在屏幕上移動時的代碼。在手指畫的情況下,Path.quadTo和Path.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.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; 
    } 
} 

然後我再次嘗試,似乎沒有區別,爲什麼Google使用quadTo?

我在遊戲程序中聽到,他們使用quadTo繪製手指顏料,但爲什麼? Plz help ... thx

回答

3

使用二次線(基本上是某種橢圓)QUAD曲線。 LineTo是一條直線。 QuadTo將消除鋸齒處的鋸齒。

+0

是的,我試着比較他們在PhotoShop。 quadTo更加流暢。 THX – StayFree 2013-04-09 14:46:20

4

根據http://developer.android.com/reference/android/graphics/Path.html

quadTo(浮動X1,浮Y1,浮X2,浮動Y2) 從最後一個點添加二次貝塞爾,接近控制點(X1,Y1),並在結束(x2,y2).. lineTo(float x,float y)添加從最後一個點到指定點(x,y)的直線。

看起來像quadTo()繪製一條曲線,基於一些二次函數,或者換句話說,拋物線。 lineTo()只畫一條直線。

+0

感謝您的回答,Gabe Sechan詳細解釋了原因。 – StayFree 2013-04-09 14:48:09

相關問題