Буфер пользовательского представления не является постоянным, вы должны рисовать все для каждого кадра, в то время как SurfaceView является постоянным, но у него есть два буфера, которые усложняют ситуацию.
Вы можете легко сделать то, что вы хотите, если бы вы нарисовали все свои объекты в растровом изображении, а затем нарисовали это растровое изображение на холсте представления. Затем вы можете создавать перегруженные методы для ваших объектов.
Другой способ сделать это, полезный для функции отмены, - сделать каждый объект классом, как предложил Тревор, и затем добавить эти объекты в ArrayList.
Когда onDraw просто перебирает ArrayList и рисует все объекты. Затем вы можете легко добавлять или удалять объекты.
Пример:
class Triangle{
public PointF p1;
public PointF p2;
public PointF p3;
public boolean filled;
public int tColor;
public boolean remove;
Triangle(PointF p1,PointF p2, PointF p3, boolean filled, int tColor){
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
this.filled = filled;
this tColor = tColor;
}
}
Создайте треугольник и добавьте его в массив:
ArrayList<Triangle> triangles = new ArrayList<Triangle>();
Triangle triangle = new Triangle(new PointF(1,1),new PointF(2.2f,2.2f),new PointF(3.3f,3.3f), true, Color.BLUE);
triangles.add(triangle);
в onDraw (Canvas canvas) для представления:
for (int i = triangles.size() - 1; i >= 0; i--) {
Triangle triangle = triangles.get(i);
if (trinagle.remove){
triangles.remove(i); //remove object if condition met
}else{
drawTriangle(triangle, canvas);
}
}
Затем вы в методе drawTriangle просто рисуете линии и т.д. на переданном холсте.
Я надеюсь, что это дает вам некоторые идеи.