Рисовать на экране 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.BLACK);
        paint.setAntiAlias(true);
    }

    @Override
    public void onDraw(Canvas canvas) {
        for (Point point : points) {

            canvas.drawCircle(point.x, point.y, 8, 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;
    }
}

Как видите, я рисую круг в каждой точке, которой касается пользователь. Я получаю непрерывную линию/кривую, когда пользователь медленно перемещает палец. Но если пользователь быстро двигает пальцами, я не получаю непрерывный рисунок. Вместо этого список разделенных точек на пути, по которому перемещался палец.

Как я могу сделать это правильно? Спасибо


person Zach    schedule 21.10.2012    source источник


Ответы (2)


Вы должны рисовать путь, а не сами точки. За информацией обращайтесь сюда: http://developer.android.com/reference/android/graphics/Path.html

person Hakan Serce    schedule 21.10.2012

Я ответил на аналогичный вопрос для рисования вручную поверх карты в этом сообщении: Рисование вручную поверх MapView

Вы можете использовать тот же код, заменив GeoPoint на Point и удалив преобразование между геоточками и точками.

person Luis    schedule 21.10.2012