android开发--Canvas清屏只需三句话

分类: Android开发 2012-11-28 21:51 4269人阅读 评论(19) 收藏 举报

这两三天一直在研究这个问题,今天终于成功了。我最终要实现的效果是,类似于照相机照相时,第一次按下按键,会出现矩形框框住人脸,这时我不想照相,再次按下会再次框出人脸,重新画个新的矩形框。 就这么简单。

误区一:我设置了一个clearDraw()的子函数,在子函数里设置:

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">void clearDraw()
  2. {
  3. /*对画布进行清屏*/
  4. Canvas canvas = sh.lockCanvas();
  5. if(canvas!=null){
  6. Paint paint = new Paint();
  7. paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
  8. canvas.drawPaint(paint);
  9. //canvas.drawColor(Color.BLUE);
  10. }
  11. sh.unlockCanvasAndPost(canvas);
  12. }</SPAN>
void clearDraw()
{
/*对画布进行清屏*/
Canvas canvas = sh.lockCanvas();
if(canvas!=null){
Paint paint = new Paint();
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
canvas.drawPaint(paint);
//canvas.drawColor(Color.BLUE);
}
sh.unlockCanvasAndPost(canvas);
}

然后每次按下按键进行识别物体的算法前,先进行清屏。得到的效果是,确实清屏了,但第二次画出矩形框时,第一次的矩形框就会蹦出来了。依次类推,的确会出现短暂的清屏效果,只是最终还是不能清屏。

误区二:

参考这里,http://www.eoeandroid.com/thread-79664-1-1.html,我用canvas.drawLine(),也就是说将paint设置为清屏模式的paint,把所有画的图形用这个画笔重新画一次,但遗憾的是这种效果也和第一种一样。

误区三:

有人提议用canvas的save和restore来解决,但很遗憾根本不是这么回事。参考:http://www.devdiv.com/article-1948-1.html

正确的方法是这样的,在SurfaceView里定义一个画图的方法,在这个画图方法的开始部分执行清屏,重点就三句话:

[java] view plaincopyprint?
  1. <SPAN style="FONT-SIZE: 18px">public void drawLine(Point p1, Point p2, Point p3)
  2. {
  3. Canvas canvas = sh.lockCanvas();
  4. canvas.drawColor(Color.TRANSPARENT);
  5. Paint p = new Paint();
  6. //清屏
  7. p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
  8. canvas.drawPaint(p);
  9. p.setXfermode(new PorterDuffXfermode(Mode.SRC));
  10. p.setAntiAlias(true);
  11. p.setColor(Color.RED);
  12. p.setStyle(Paint.Style.FILL);
  13. canvas.drawLine(0,0, 500, 500, p);
  14. sh.unlockCanvasAndPost(canvas);
  15. }</SPAN>
public void drawLine(Point p1, Point p2, Point p3)
{
Canvas canvas = sh.lockCanvas();
canvas.drawColor(Color.TRANSPARENT);
Paint p = new Paint();
//清屏
p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
canvas.drawPaint(p);
p.setXfermode(new PorterDuffXfermode(Mode.SRC));
p.setAntiAlias(true);
p.setColor(Color.RED);
p.setStyle(Paint.Style.FILL);
canvas.drawLine(0,0, 500, 500, p);
sh.unlockCanvasAndPost(canvas);
}

清屏:

Paint p = new Paint();
        //清屏
        p.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
        canvas.drawPaint(p);
        p.setXfermode(new PorterDuffXfermode(Mode.SRC));

。。。。。。。。这里设置paint并开始自己的画图。。。。。。。。。
       
参考:http://stackoverflow.com/questions/4650755/clearing-canvas-with-canvas-drawcolor

http://blog.csdn.net/yuanlong_zheng/article/details/7592457

Android 如何清空 Canvas 清屏只需三句话相关推荐

  1. android开发--Canvas清屏只需三句话

    这两三天一直在研究这个问题,今天终于成功了.我最终要实现的效果是,类似于照相机照相时,第一次按下按键,会出现矩形框框住人脸,这时我不想照相,再次按下会再次框出人脸,重新画个新的矩形框. 就这么简单. ...

  2. 解除网页限制只需三句话

    方式一 通常直接按F12,如果此键被禁止,可以通过SHIFT + CTRL + I,或者通过浏览器菜单里面的"开发者工具"打开. 选择控制台,输入以下代码回车即可. // 开启文字 ...

  3. java和python的比较-如何对比Python和Java,只需三分钟告诉你!

    原标题:如何对比Python和Java,只需三分钟告诉你! Java和Python两门语言都是目前非常热门的语言,可谓北乔峰南慕容,二者不分上下,棋逢对手.但是对于初学者来说,非常困惑,因为时间和精力 ...

  4. 创意发明: 基于STC51单片机超声波测距(精简设计只需三个元件)

    基于STC51单片机超声波测距精简设计只需三个元件(测距模块暂且算做是一个元件吧) 1.所需元件:STC单片机+超声波模块+4位共阳数码管 2.原理:单片机向测距模块trig脚发送20us的高电平触发 ...

  5. 如何重新设置苹果id密码_忘记苹果手机ID密码怎么办?不要着急,只需三招,轻松解决...

    一般来说,iPhone手机是大家眼中手机品牌的最高峰,尽管他很贵但是还是很多人为了他,花上一两月的工资去购买一部苹果手机.大家都觉得用iPhone手机比国产手机好,因为像小米.oppo等国产手机但是组 ...

  6. 如何只需三步搭建一对一直播系统源码

    随着当下直播行业的红火几乎所有的人手机上都安装了直播app,但是呢直播app也包含很多分类,有一对多直播的还有一对一直播系统,这些系统都是通过直播源码搭建起来的,直播系统开发便获得越来越多程序员的关注 ...

  7. iphone看python文件_Python实战 | 只需 ”三步“ 爬取二手iphone手机信息(转发送源码)...

    原标题:Python实战 | 只需 "三步" 爬取二手iphone手机信息(转发送源码) 本次实战是爬取二手苹果手机的信息,共爬取了300部手机信息,效果如下: 开发环境 环境:M ...

  8. 数据流程图顶层一层二层_只需三个公式,三阶魔方超简单入门图文教程5:完全复原第二层...

    大家好,欢迎来到大超小志,上节课我们讲了"复原底层角块",也就是完全复原第一层,今天我们来复原第二层的棱块,也就是完全复原第二层. 第二层的棱块要么在第二层,要么在最顶层. 我们先 ...

  9. delphi 解析一维条码_科普帖:一般商用条码扫描器全知道,只需三把枪

    [圈外]科普帖:一般商用条码扫描器全知道,只需三把"枪" (一) 上一帖给大家介绍了带小镜子并且害怕"远光灯"的激光一维条码扫描"枪",今天 ...

最新文章

  1. 深度报告解密华为汽车业务!布局三大领域,对标世界级Tier1
  2. 综合布线工作组2009年工作简报
  3. android 解决setbackgrounddrawable过时
  4. netflix_Netflix Archaius用于物业管理–基础知识
  5. lua 函数 默认值_Unity热更新框架之xLua
  6. Udemy上Gephi教程笔记2
  7. [对于蓝桥杯要说的一二体会]
  8. 《华为研发》阅读 - 11 (中研部组织结构)
  9. 用计算机弹奏全球变冷,《全球变冷,钢琴谱》许嵩(五线谱 钢琴曲 指法)-弹吧|蛐蛐钢琴网...
  10. 简易的定时发送生日邮件功能(Listener+定时器+使用java发送邮件)
  11. js 中的 this、that
  12. 浙江省2021年高新技术企业认定补贴奖励查询及优惠政策,国高达60万
  13. 2020.10.3--PS--模糊工具、减淡工具、橡皮擦工具
  14. NBS云硬盘无法挂载
  15. TryHackMe-VulnNet_dotpy
  16. java计算机毕业设计ETC用户自驾游推荐系统MyBatis+系统+LW文档+源码+调试部署
  17. CODEVS1214
  18. (转)创新性应用-使用脚本加速DB2存储过程的开发-常红平
  19. 使用 Lancy Character with Hair DF 动态头发
  20. Linux权限位中的s、t

热门文章

  1. windows7安装python框架_windows7下安装python3的scrapy框架
  2. C语言基础之个税计算器demo实现
  3. P2P太假了,光有网站平台,连人都找不着了,更不用说网站大漏洞没人管,呵呵
  4. 微创新只是大公司用来挤压小公司的武器,但绝不是小公司与大公司竞争的法宝。——转自傅盛...
  5. of介词短语作定语_in和on的介词短语做后置定语的区别?
  6. STM32F103最小系统电路 实测成功!
  7. SP业务全线回暖导致华友光线合作失败
  8. Bootstrap方法在R语言中的运用
  9. 视频教程-手把手实现Java图书管理系统(附源码)-Java
  10. 信用卡,今天你办了吗?