在自定义view画板的时候,想实现多种颜色的绘制
我的想法是:改变画笔颜色不就可以实现吗。
于是通过 paint.setColor(color); 来设置画笔颜色,一顿操作之后发现,
在绘制之后,改变画笔颜色,再次绘制的时候,之前的颜色也改变了,这是咋回事呢?
我是在ondraw()中 canvas.drawPath(path, paint)绘制的啊,于是上网找了好久,没找到解
决办法
再看看canvas.drawPath(path, paint) 这个方法,path, paint是成员变量参数。
path --是绘制的路径,
paint ---是画笔,
当每次我改变画笔颜色时后 path是绘制的所有路径,
每次ondraw() 都会调用 canvas.drawPath(path, paint) 来绘制,这时路径是所有
绘制的路径
画笔颜色时改变了的颜色,所以才会出现,改变画笔颜色,之前绘制的颜色也会改变。
整理思路:当每次手指按下的时候,重新new paint、path 并且把每次画笔和路径都保存起来放在list,这样每次ondraw()的时候循环list来绘制
最终代码:初始化 list paths = new ArrayList<Path>();
paints = new ArrayList<Paint>();
在onTouchEvent中当每次按下时:
path = new Path();//路径
//设置画笔默认配置
paint = new Paint();
paint.setColor(paintColor);//颜色
paint.setStrokeWidth(paintWidth);//线宽
paint.setAntiAlias(true);//抗锯齿
paint.setStyle(Paint.Style.STROKE); //只绘制图形轮廓(描边)
paint.setStrokeJoin(Paint.Join.ROUND);
paths.add(path);
paints.add(paint);
在ondraw()中
if(paints!=null&&paints.size()>0){
for(int i=0;i<paints.size();i++){
canvas.drawPath(paths.get(i), paints.get(i));//设置画笔,路径
}
}
这样就完美解决了我想要实现的:多种颜色绘制,不论改变画笔宽度大小也可以