Reputation: 81
How do I get smooth curves instead of dots or circles, when I draw with my finger on the touch screen, in Android? I am using the following code-
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;
}
}
Upvotes: 3
Views: 7845
Reputation: 36484
There is a FingerPaint application bundled with API demos package; you can take a look at that. Here is the link
Upvotes: 5
Reputation: 6092
I think setting anti aliasing may help you refer this: http://developer.android.com/reference/android/graphics/Paint.html#setAntiAlias(boolean) http://en.wikipedia.org/wiki/Spatial_anti-aliasing
Upvotes: 0
Reputation: 55714
I imagine you'd have to use some kind of interpolation and fill in the gaps yourself. It would completely kill the system if it had to despatch touch events for every single pixel your finger moved across.
Upvotes: 0