Android 清除canvas内容(转载)

本文介绍了两种清除Android应用中Canvas画布的方法。方法一使用canvas.drawColor结合Color.TRANSPARENT及PorterDuff.Mode.CLEAR实现;方法二通过创建Paint对象并设置Xfermode为PorterDuff.Mode.CLEAR,然后绘制整个画布来清除内容。

转载自:https://blog.youkuaiyun.com/heiding215/article/details/19197733

画新的东西之前需要先清除画布内容:

方法1:

[java]  view plain  copy
  1. canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);  

方法2

[java]  view plain  copy
  1. Paint paint = new Paint();    
  2. paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));    
  3. canvas.drawPaint(paint);    
  4. paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));    
Android中,使用Canvas清除画布内容有以下几种方法: ### 利用Paint和PorterDuffXfermode 可以创建一个Paint对象,并设置其Xfermode为`PorterDuff.Mode.CLEAR`,然后使用`canvas.drawPaint(paint)`方法清除画布,之后再将Xfermode设置回`PorterDuff.Mode.SRC`。示例代码如下: ```java Paint paint = new Paint(); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); canvas.drawPaint(paint); paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); ``` 也可以使用`canvas.drawColor`方法,将颜色设置为透明并指定`PorterDuff.Mode.CLEAR`模式: ```java canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); ``` 这种方法适用于简单的画布清除场景,不过如果线条多次绘制且中间有其他操作时,处理起来可能较复杂[^1]。 ### 将Canvas内容转化为Base64编码的Image 若线条多次绘制且中间存在其他操作,可将整个canvas画布转化成Base64编码的image,后续再次绘制时把这个image数据绘制到canvas上,以便继续进行绘制和擦内容,但此方法较难实现线擦功能[^2]。 ### 在自定义View中使用全局变量控制清除 在自定义View里定义一个全局布尔变量`clear`,初始值为`false`。在`onDraw`方法中,若`clear`为`true`,先将`clear`重置为`false`,并进行清除路径等保存绘画路径的逻辑,然后直接`return`结束函数。同时,编写一个清除方法`clearC`,在该方法中将`clear`置为`true`,并调用`invalidate`方法触发重绘。示例代码如下: ```java class MyCustomView extends View { boolean clear = false; public MyCustomView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { if (clear == true) { clear = false; // 这里做清除path等保存绘画路径的逻辑 return; } // 下面是正常的绘画代码 } public void clearC(MyCustomView myCustomView) { clear = true; myCustomView.invalidate(); } } ``` 此方法通过控制重绘流程来实现画布清除效果[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值