我正在尝试做一个简单的绘画应用程序,但是每次我调用onDraw时,它都会抹掉我以前的内容。在我的平局中,我正在执行以下操作(其中point是具有x和y int的类,而“ points”是列表点):

        Paint paint = new Paint();
        int c = getPaintFromActivityClass();
        paint.setColor(c);
        Path path = new Path();
        boolean first = true;
        for(Point point : points){
            if(first){
                first = false;
                path.moveTo(point.x, point.y);
            }
            else{
                path.lineTo(point.x, point.y);
            }
        }
        canvas.drawPath(path, paint);


我尝试每次都将“旧”路径添加到新路径,实际上是将路径彼此连接在一起,并创建了单独的(未连接)路径。但是,在onDraw中,我还要设置另一种视图正在更改的绘画颜色。当我相互添加路径时,更改颜色会更改所有路径的颜色。

最佳答案

另一个选择是创建一个包含路径和颜色的ArrayList或Vector并存储它们,然后更改onDraw方法。将它们添加到类中:

ArrayList<Path> paths;
ArrayList<int> colors;


在onTouch中,您将创建一个路径和颜色并将其添加到每个ArrayList中,然后在ondraw中遍历该路径...仍然在ontouch方法中调用invalidate。首先,您将清空ArrayList

Paint paint = new Paint();
for(int i =0 : i < Paths.size() ;i++){
paint.setColor(colors.get(i));
canvas.drawPath(paths.get(i), paint);
}


如果创建了一堆位图,请确保在正确的时间对其进行回收。如果您想跟踪历史记录,此答案中的概念可能会更好,只需执行一个简单的“撤消”按钮,然后弹出最后一个条目,就会很容易。您可以通过创建自己的类来跟踪颜色和路径来进一步优化此方法,然后您的自定义类将只有一个ArrayList。

07-24 09:49
查看更多