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))