нарисовать линию - Android - PullRequest
3 голосов
/ 16 июня 2011

Я хочу нарисовать линию на экране, используя сенсорный слушатель, но когда я пытаюсь нарисовать линию снова, она стирает предыдущую линию.Я использую этот код: -

Я не могу найти решение проблемы.

public class Drawer extends View
{
    public Drawer(Context context)
    {
        super(context);
    }

    protected void onDraw(Canvas canvas)
    {
        Paint p = new Paint();
        p.setColor(colordraw);
        canvas.drawLine(x1, y1, x2, y2, p);
        invalidate();
    }
}

1 Ответ

2 голосов
/ 16 июня 2011

Я почти уверен, что invalidate () стирает холст, поэтому вам нужно сохранить коллекцию линий, которые вы хотите нарисовать. Затем вам нужно рисовать ВСЕ из них КАЖДЫЙ раз, прежде чем вызывать invalidate ().

private class Line {

    public Line(int x1, int y1, int x2, int y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }
    ...    
}

public class Drawer extends View
{  
    ArrayList<Line> lines;
    public Drawer(Context context)
    {
        super(context);
        lines = new ArrayList<Line>();
    }

    public void addLine(int x1, int y1, int x2, int y2) {
        Line newLine = new Line(x1, y1, x2, y2);
        lines.add(newLine);
    }

    protected void onDraw(Canvas canvas)
    {
        Paint p = new Paint();
        p.setColor(colordraw);
        for (Line myLine : lines) {
            canvas.drawLine(myLine.getX1(), myLine.getY1(), myLine.getX2(), myLine.getY2(), p);
        }
        invalidate();
    }
}
...