Android краска / холст проблема; рисование плавных кривых - PullRequest
3 голосов
/ 14 апреля 2010

Как получить плавные кривые вместо точек или кругов, когда я рисую пальцем на сенсорном экране в 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;
}
}

Ответы [ 3 ]

5 голосов
/ 14 апреля 2010

Существует приложение FingerPaint, связанное с демонстрационным пакетом API; Вы можете взглянуть на это. Вот ссылка

0 голосов
/ 11 октября 2011

Я думаю, что установка сглаживания может помочь вам сослаться на это: http://developer.android.com/reference/android/graphics/Paint.html#setAntiAlias(boolean) http://en.wikipedia.org/wiki/Spatial_anti-aliasing

0 голосов
/ 14 апреля 2010

Я полагаю, вам придется использовать какую-то интерполяцию и заполнить пробелы самостоятельно. Это полностью убило бы систему, если бы пришлось отправлять события касания для каждого пикселя, по которому перемещался ваш палец.

...