Android自定义ImageView如何清除之前在Canvas上绘制的内容
问题根因
你当前的实现中,所有用户绘制的笔迹最终都会被写入canvasBitmap位图对象中,现有clearCanvas方法仅重置了绘制路径和画笔参数,没有清空这个存储了所有历史笔迹的位图,所以旧笔迹会一直保留。另外类中drawPath和paintColor加了static修饰,会导致多个DrawingView实例共用同一个变量、相互干扰,建议先移除这两个变量的static修饰。
修复步骤
- 修正成员变量定义,移除static修饰
// 将原来的静态成员变量修改为普通成员变量 Path drawPath; int paintColor = 0xFFFFFFFF;
- 重写
clearCanvas方法,替换原有实现
public void clearCanvas() { // 清空存储历史笔迹的位图 if (canvasBitmap != null) { canvasBitmap.eraseColor(Color.TRANSPARENT); } // 重置当前未完成的绘制路径 if (drawPath != null) { drawPath.reset(); } // 恢复为普通绘制模式 setErase(false); // 刷新视图 invalidate(); }
使用方式
每次加载完下一张新图片之后,调用yourDrawingView.clearCanvas()即可清除所有之前的绘制笔迹,不会影响新加载的底图显示,用户可以直接在新图上重新绘制。
如果你的新图是通过setImageOnImageview方法设置的,这个方法直接替换了canvasBitmap,旧笔迹本来就会自动消失;如果是用ImageView原生的setImageResource/setImageBitmap设置底图,上层的绘制层就需要调用上述方法清空。
内容的提问来源于stack exchange,提问作者RR_Pradhan
相关产品推荐
相关产品推荐

