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

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

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里定义一个画图的方法,在这个画图方法的开始部分执行清屏,重点就三句话:

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每日一讲qq群:248217350    欢迎大家加进来

android开发--Canvas清屏只需三句话相关推荐

  1. Android 如何清空 Canvas 清屏只需三句话

    android开发--Canvas清屏只需三句话 分类: Android开发 2012-11-28 21:51 4269人阅读 评论(19) 收藏 举报 这两三天一直在研究这个问题,今天终于成功了.我 ...

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

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

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

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

  4. Android开发中横竖屏切换的问题以及系统提供的常用Activity

    Android开发中横竖屏切换的问题以及系统提供的常用Activity(总结) 2018年06月28日 16:18:45 北极熊的微笑 阅读数:72 横竖屏切换与状态保存的问题 前面也也说到了App横 ...

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

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

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

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

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

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

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

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

  9. python发音机器人_只需三步,菜鸟也能用Python做一个简易版Siri

    原标题:只需三步,菜鸟也能用Python做一个简易版Siri 当下,各个手机厂商都陆续的推出了属于自己的智能手机机器人,像是苹果的Siri,小米的小爱,还有等等.这些智能机器人不仅仅方便了我们对于手机 ...

最新文章

  1. html编辑器 br 被div,百度Ueditor编辑器DIV,html标签替换及代码被过滤问题解决方法...
  2. java mvc 分页查询条件_java分页条件查询-GridManager.js表格插件+Pageable分页对象+mybatis pagehelper分页插件...
  3. python学习-元组tuple(定义、删除、长度、复制、查找、遍历、operator,和列表的区别)
  4. calender获取日期前几月_java获取当前时间和前一天日期(实现代码)
  5. 精简DropDownList用法
  6. Highcharts 统计图
  7. MATLAB实现图像滤波--高斯滤波
  8. C++解决八数码问题
  9. photoshop CS6 安装 coolorus色环
  10. 【雅思大作文考官范文】——第十六篇:climate change essay
  11. 看雪CTF.TSRC 2018 团队赛 第一题 初世纪 writeup
  12. greenplum麒麟安装笔记
  13. 阿里云oss对象存储的使用
  14. 验证 网址,IP,邮箱,电话,手机,数字,英文,日期,身份证,邮编
  15. loss scale的理解
  16. 用友BIP对接外部旺店通企业版奇门系统
  17. 【Java SE系列】抽象类与接口
  18. 计算机图形学(二)输出图元_6_OpenGL曲线函数_5_其他曲线
  19. 想知道pdf翻译软件哪个好用?pdf翻译如何实现?
  20. oracle 倒库命令

热门文章

  1. python 比较三个数的最大值,不考虑相等的情况
  2. Python实现 文本进度条展示(嵩天老师)
  3. ubuntu下彻底卸载 jupyter notebook
  4. pdf.net sod oracle,SOD: 原PDF.NET框架将成为一个全功能的企业开发框架,而 SOD框架将是PDF.NET开发框架下面的 “数据开发框架...
  5. 解决chrome提示没有注册类错误
  6. 射频开关主要性能指标
  7. Sklearn机器学习——ROC曲线、ROC曲线的绘制和AUC面积、运用ROC曲线找到最佳阈值
  8. 【STM32学习】(19)STM32实现直流电机测转速(霍尔传感器)
  9. 电信大型服务器机房_国内联通、电信、移动IDC机房名录
  10. 拖拽生成html页面,简单拖拽即生成网页 VvvebJs