2010-04-14 143 views
3

當我用手指在Android的觸摸屏上繪製時,如何獲得平滑曲線而不是圓點或圓圈?我使用下面的代碼 -Android的油漆/畫布問題;繪製平滑曲線

public class DrawView extends View implements OnTouchListener { 
private static final String TAG = "DrawView"; 

List<Point> points = new ArrayList<Point>(); 
Paint paint = new Paint(); 

public DrawView(Context context) { 
    super(context); 
    setFocusable(true); 
    setFocusableInTouchMode(true); 

    this.setOnTouchListener(this); 

    paint.setColor(Color.WHITE); 
    paint.setAntiAlias(true); 
} 

    @Override 
    public void onDraw(Canvas canvas) { 
    for (Point point : points) { 
     canvas.drawCircle(point.x, point.y, 5, paint); 
     // Log.d(TAG, "Painting: "+point); 
    } 
} 

public boolean onTouch(View view, MotionEvent event) { 
    // if(event.getAction() != MotionEvent.ACTION_DOWN) 
    // return super.onTouchEvent(event); 
    Point point = new Point(); 
    point.x = event.getX(); 
    point.y = event.getY(); 
    points.add(point); 
    invalidate(); 
    Log.d(TAG, "point: " + point); 
    return true; 
} 
} 

class Point { 
float x, y; 

@Override 
public String toString() { 
    return x + ", " + y; 
} 
} 

回答

0

我想你必須使用某種類型的插值和填補空白自己。如果它必須爲您的手指移過的每個像素髮送觸摸事件,它會徹底殺死系統。

+0

感謝史蒂夫。 但不是使用canvas.drawCircle(point.x,point.y,5,paint);我只想繪製一條連續曲線,因爲我得到的是小圓圈。我不知道如何做插值,所以如果有一種方法/方法在Android中簡單地繪製/繪製曲線,那麼我想使用它。 – Wrapper 2010-04-14 17:45:45

+0

在Finger畫面中,您可以使用Bezier曲線連接由觸摸界面檢測到的相鄰點。 – Samuh 2010-04-15 03:18:54

5

有一個FingerPaint應用程序與API演示程序包捆綁在一起;你可以看看那個。這裏是link