这两三天一直在研究这个问题,今天终于成功了。我最终要实现的效果是,类似于照相机照相时,第一次按下按键,会出现矩形框框住人脸,这时我不想照相,再次按下会再次框出人脸,重新画个新的矩形框。 就这么简单。
误区一:我设置了一个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每日一讲:248217350 欢迎大家加进来
分享到:
相关推荐
android-openGL-canvas-master.zip
android开发:用canvas实现画板的功能。
wxml-to-canvas 小程序内通过静态模板和样式绘制 canvas ,导出图片,可用于生成分享图等场景
HTML5+JS游戏开发模块----canvas图片拖放,炮塔攻击范围绘制,炮塔原本位置,炮塔图片的拖放
vue-sign-canvas-master 一个基于canvas开发,封装于Vue组件的通用手写签名板(电子签名板),支持pc端和移动端;
前端开源库-map-canvas地图画布,用于
canvas.c - A drawing canvas widget
HTML5+JS游戏开发模块----canvas打字游戏 里面实现多个字母同时出现,每个字体都有自己的随机速度,字母数组的随机生成,canvas 模拟鼠标经过效果,鼠标点击,按键触发,字母换颜色,项目简单,希望能够给初学者一些...
通过npm安装(推荐)小程序已经支持使用npm安装第三方包,详见# npmnpm i wxa-plugin-canvas -S --production# yarnyarn add wxa-plugin-canvas --production方式二。下载代码直接通过git下载wxa-plugin-canvas源...
android-canvas-donut-chart.7z
taro-plugin-canvas 小程序组件-小程序海报组件 概述 taro-plugin-canvas 是基于 Taro 框架的微信小程序 canvas 绘图组件,封装了常用的操作,通过配置的方式生成分享图片 本组件是基于 的Taro封装版本 生成效果 ...
android 自定义view(Paint和Canvas),安卓自定义View,安卓自定义。
手摸手教你用Canvas实现简单粒子动画 Attributes name format description 中文解释 pv_host_text string set left host text 设置左边主文案 pv_host_text_size dimension set host text size 设置主文案...
前端项目-javascript-canvas-to-blob,javascript canvas to blob是一个将画布元素转换为blob对象的函数。
前端开源库-fireworks-canvas烟花画布,烟花示例
微信小程序canvas,可在小程序内编辑图片。canvas 实现图片拉伸、压缩与裁剪。功能比较简单。
微信小程序海报插件,生成海报的小程序组件wxa-plugin-canvas-master.zip
前端项目-stackblur-canvas,Fast and almost Gaussian blur by Mario Klingemann
ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-...
项目应用功能提供一个类似Android Canvas类的使用OpenGL来实现实现的canvasGL。可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画...