Android 安卓帆布。动态添加路径点

Android 安卓帆布。动态添加路径点,android,canvas,path,drawing,Android,Canvas,Path,Drawing,我试图在路径中添加点并在它们之间画线,但什么也没有出现 我有自定义视图: public class BreakDownBar extends View { private List<Point> points = new ArrayList<>(); private Path path = new Path(); private Paint p = new Paint(); public BreakDownBar(Context context) { super

我试图在
路径中添加点
并在它们之间画线,但什么也没有出现

我有自定义视图:

public class BreakDownBar extends View {
private List<Point> points = new ArrayList<>();
private Path path = new Path();
private Paint p = new Paint();

public BreakDownBar(Context context) {
    super(context);
}

public BreakDownBar(Context context, AttributeSet attrs) {
    super(context, attrs);
    p.setStrokeWidth(5);
    p.setStyle(Paint.Style.STROKE);
}

public void addPoint(Point point) {
    points.add(point);
    path.rewind();
    reDraw();
}

public void startPoint(Point point) {
    points.add(point);
}

private void reDraw() {
    Canvas canvas = new Canvas();
    path.moveTo(points.getFirst().getX(), points.getFirst().getY());
    for (int i = 1; i < points.size(); i++) {
        path.lineTo(points.get(i).getX(), points.get(i).getY());
    }


    canvas.drawPath(path, p);
    canvas.drawColor(Color.BLACK);
    draw(canvas);
    invalidate();
}
在向
列表添加新点时
我可以在日志中看到预期结果,但屏幕上什么也没有发生


在屏幕上显示线条时我错过了什么?

您使用了错误的逻辑来绘制线条,如果调用
invalidate()
,您将请求调用
draw()
,这将重置画布

尝试使用此版本的类:

public class BreakDownBar extends View {
    private List<Point> points = new ArrayList<>();
    private Path path = new Path();
    private Paint p = new Paint();

    public BreakDownBar(Context context) {
        super(context);
        p.setStrokeWidth(5);
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.BLACK);
    }

    public void addPoint(Point point) {
        points.add(point);
        //this will request a call to draw(canvas) method
        invalidate();
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        //move to the first point in the list
        path.moveTo(points.get(0).getX(), points.get(0).getY());
        for (int i = 1; i < points.size(); i++) {
            path.lineTo(points.get(i).getX(), points.get(i).getY());
        }
        canvas.drawPath(path, p);
    }
}
让我知道这是否适合你

public class BreakDownBar extends View {
    private List<Point> points = new ArrayList<>();
    private Path path = new Path();
    private Paint p = new Paint();

    public BreakDownBar(Context context) {
        super(context);
        p.setStrokeWidth(5);
        p.setStyle(Paint.Style.STROKE);
        p.setColor(Color.BLACK);
    }

    public void addPoint(Point point) {
        points.add(point);
        //this will request a call to draw(canvas) method
        invalidate();
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        //move to the first point in the list
        path.moveTo(points.get(0).getX(), points.get(0).getY());
        for (int i = 1; i < points.size(); i++) {
            path.lineTo(points.get(i).getX(), points.get(i).getY());
        }
        canvas.drawPath(path, p);
    }
}
BreakDownBar bar = new BreakDownBar(context);
bar.addPoint(new Point(100f, 200f))
bar.addPoint(new Point(200f, 300f))
bar.addPoint(new Point(400f, 200f))