这两三天一直在研究这个问题,今天终于成功了。我最终要实现的效果是,类似于照相机照相时,第一次按下按键,会出现矩形框框住人脸,这时我不想照相,再次按下会再次框出人脸,重新画个新的矩形框。 就这么简单。
误区一:我设置了一个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
相关推荐
【微信小程序 uni-app wxml-to-canvas】是一个用于在微信小程序中利用静态模板和样式来绘制canvas,并最终能够导出为图片的工具。这个技术在实际应用中特别适合用来生成分享图,即用户在社交平台上分享时看到的个性...
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是`android.graphics`包中的一个类。Canvas提供了各种方法来绘制线条、形状、文本、图片等元素,使得开发者能够实现丰富的用户界面,如画板应用。本文...
在“android-openGL-canvas-master.zip”这个项目中,开发者可能结合了这两者,创建了一个示例应用来展示如何在 Android 上使用 OpenGL ES(OpenGL 的嵌入式版本)与 Canvas 进行交互,以实现更高效的图形绘制和动画...
总的来说,Vue-sign-canvas-master.zip是一个强大的工具,它结合了Vue.js和canvas技术,为开发人员提供了一种灵活且易于集成的电子签名解决方案。通过理解和应用这个组件,开发者可以在自己的应用程序中轻松实现电子...
微信小程序canvas-drag组件是为了解决在微信小程序中对图片进行编辑的需求而设计的。这个组件基于canvas元素,提供了一种简单的方式让用户在小程序内部实现图片的拉伸、压缩和裁剪操作。通过这个组件,开发者可以...
本压缩包“wxa-plugin-canvas-master.zip”包含了一个专门用于微信小程序的海报生成组件,它可以帮助开发者在小程序中实现自定义海报的动态生成功能。 首先,我们要理解“wxa-plugin-canvas-master”中的“wxa”...
10. **兼容性**:考虑到浏览器的多样性,Map-Canvas应该对主流浏览器如Chrome、Firefox、Safari和Edge有良好的支持,同时也需要考虑移动设备的兼容性,如iOS和Android系统的浏览器。 综上所述,Map-Canvas是一个...
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它可以让我们实现自定义视图,进行复杂的绘图操作。这个项目“Android代码-简单用canvas实现一个圆锥漏斗按照比例分成不同颜色显示。用来做统计。”就是...
在Android开发中,自定义View是一项重要的技能,它允许开发者创造出独特且富有表现力的用户界面,超越系统预设的视图组件。本资源“Android -自定义view-Paint和Canvas.rar”着重讲解了如何利用Paint和Canvas进行...
ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-canvas 实现echart图表显示ec-...
Vue.js 是一款非常流行的前端框架,它以组件化开发为核心,极大地提高了开发效率。在这个“vue ---- 基于canvas的绘制海报组件”的项目中,开发者利用 Vue 2.0 版本创建了一个专用于在网页上绘制H5海报的组件。这个...
HTML5+JS游戏开发模块----canvas打字游戏 里面实现多个字母同时出现,每个字体都有自己的随机速度,字母数组的随机生成,canvas 模拟鼠标经过效果,鼠标点击,按键触发,字母换颜色,项目简单,希望能够给初学者一些...
通过npm安装(推荐)小程序已经支持使用npm安装第三方包,详见# npmnpm i wxa-plugin-canvas -S --production# yarnyarn add wxa-plugin-canvas --production方式二。下载代码直接通过git下载wxa-plugin-canvas源...
taro-plugin-canvas 小程序组件-小程序海报组件 概述 taro-plugin-canvas 是基于 Taro 框架的微信小程序 canvas 绘图组件,封装了常用的操作,通过配置的方式生成分享图片 本组件是基于 的Taro封装版本 生成效果 ...
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具。Canvas提供了丰富的API,使得开发者能够绘制各种复杂的图形,包括直线、曲线、圆形、矩形以及多边形等。本篇文章将详细讲解如何利用Canvas在Android中画...
"android-canvas-donut-chart.7z"这个压缩包文件很可能包含了一个使用Canvas来实现甜甜圈图(Donut Chart)的示例项目。甜甜圈图是一种数据可视化工具,通常用于展示各项比例关系,它由环形区域组成,中心有一个空洞...
在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...
这个“Android代码-Android截图圆形Canvas.rar”压缩包可能包含了一个实现这种功能的示例项目。下面我们将详细探讨如何在Android中实现圆形截图的功能。 首先,Android中的截图通常通过`View`类的`draw()`方法或者`...
项目应用功能提供一个类似Android Canvas类的使用OpenGL来实现实现的canvasGL。可以像传统自定义View那样直接继承GLViews,再使用这个canvas替换需要的东西。提供类似GPUImage里的Filter的API,可以在使用画布GL画...
uni-app 利用canvas进行画框,移动框,放大缩小并删除,目前支持小程序,h5,其他没测试过