2010-04-14 147 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