`
dawuafang
  • 浏览: 1111550 次
文章分类
社区版块
存档分类
最新评论

关于Canvas的记录

 
阅读更多

http://blog.csdn.net/rhljiayou/article/details/7212620

drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) //贴图,参数一就是我们常规的Bitmap对象,参数二是源区域(这里是bitmap),参数三是目标区域(应该在canvas的位置和大小),参数四是Paint画刷对象,因为用到了缩放和拉伸的可能,当原始Rect不等于目标Rect时性能将会有大幅损失。

这个Rect类型的src是表示需要剪切原有bitmap的区域,而Rect类型的dst是需要显示bitmap的区域,bitmap会填充整个的dst区域。

ps:在我做瀑布流效果的时候,遇到需要绘制bitmap,但是bitmap和bitmap之间的空隙不知道如何绘制,想了在bitmap下绘制个长方形rect的,但是失败了。静下心来想想,由于我的View是自定义的,并且在onDraw方法里面绘制的bitmap,既然drawbitmap改变不了bitmap的最后显示区域,测试在onMeasure方法里直接setMeasuredDimension(width, height+5);就可以使得bitmap直接的间隙有5个dp单位的空隙了。


再上篇网志http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html



Android画图避免屏幕闪烁


在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下:

Java代码:
Canvas c = null;

try {
c = mSurfaceHolder.lockCanvas(null);
if (c != null) {
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint); //画背景
c.drawBitmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null); //第二张图画在第一张旁边
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}

控制它左右平移时,会发现屏幕非常闪烁,眼睛看着会非常累。研究以后发现,这是因为两张图是依次一张一张贴到屏幕上的,如果刷新频率高的话,会使屏幕非常的闪烁。

解决的办法其实非常简单,想起windows下开发解决画图闪烁的办法,先把要画的图先画好放在一张大的内存位图上,然后一下贴到屏幕。android其实也是一样的,上面的问题解决方法如下:

Java代码:

final Bitmap memBm = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565);
final Canvas c = new Canvas(memBm);
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint); //画背景
c.drawBitmap(bm1, 0, 0, null);
c.drawBitmap(bm2,bm1.getWidth(), 0, null); //第二张图画在第一张旁边
Canvas render = null;
try {
render = mSurfaceHolder.lockCanvas();
if (render != null) {
render.drawBitmap(memBm, 0, 0, null);
}
} finally {
if (render != null)
mSurfaceHolder.unlockCanvasAndPost(render);
}
memBm.recycle(); //记得回收内存位图


有空继续更新……

分享到:
评论

相关推荐

    canvas实现涂鸦效果

    实现涂鸦基本功能、更改笔触大小颜色、更改背景图、橡皮檫、历史记录、清屏和保存功能

    OpenGL Canvas for Delphi

    过程都会记录到一个绘制列表里。可以多次调用该列表以提高绘图速度。 类似GDIP的Graphic path 尚不支持的特性与问题: 1. 由于OpenGL自身只支持凸多边形,所以使用本画布绘制非凸多边形时会 有一些显示上的问题...

    html2canvas.js

    最近用有个需求需要上传图片然后生成海报保存,使用了 html2canvas 来实现,这里记录一下实现过程与遇到的问题

    详解Canvas事件绑定

    我先来讲下实现原理:其实就是canvas绑定相关事件,在通过记录图片所在canvas的坐标,判断事件作用于哪个图片中。这样讲是不是感觉跟事件代理有点相似咧。不过实现起来还是有稍许复杂的。 ps:下面的代码我是用ts写...

    canvas-recorder:记录在canvas或webgl中制作的动画的工具

    帆布记录仪 明目张胆的骗人货 :smiling_face_with_sunglasses: 这是一个小工具,可以记录任何类型的基于画布的动画。 该工具可用于在浏览器中运行动画,直到准备好录制它为止。 该设置围绕以下代码中描述的四个核心...

    canvas生成带二维码海报的踩坑记录

    canvas海报内容有背景图,圆形头像,用户昵称,链接的二维码图片。 问题如下 图片不显示 绘制渲染的时候图像不显示:是因为图片异步加载,所以canvas的操作需要放在onload事件中,否则图片会不显示,因为图片不止...

    canvas-record:一个小技巧小马包,用于记录和下载来自画布动画的视频

    画布记录 一个小技巧小马程序包,用于记录和下载来自画布动画的视频。 安装 npm install canvas-record 用法 import canvasRecord from "canvas-record" ; import canvasContext from "canvas-context" ; const ...

    html2 canvas生成清晰的图片实现打印功能

    但是效果很模糊 ,本文主要记录一下如果解决模糊的问题以及各种参数如何设置 基本用法   window.html2canvas(dom, { scale: scale, width: dom.offsetWidth, height: dom.offsetHeight }).then(function ...

    html2canvas生成清晰的图片实现打印的示例代码

    但是效果很模糊 ,本文主要记录一下如果解决模糊的问题以及各种参数如何设置 目录 基本用法 处理模糊问题 细节问题-压缩base64, 导出处理 基本用法 window.html2canvas(dom, { scale: scale, width: dom....

    基本画线实现算法.rar_c builder_c++ builder canvas_canvas_pen_画线

    Canvas->Pen->Color = ColorDialog1->Color 5、 编写Image1的OnImage1MouseUp事件,要求实现: 1) 若是第奇数次鼠标按钮弹起,则根据rgDrawWhat的选择,记录直线第一个端点或圆心坐标; 2) 若是第偶数次...

    canvas如何实现多张图片编辑的图片编辑器

    本次不具体介绍canvas的各种操作画布的api,而且相信大家在网上能搜到大量的关于canvas涂鸦的开源代码,即使是这样,我也相信真正把canvas涂鸦用于公司实际的项目的不多,改装成图片编辑器的会更少,而用于多张图片...

    canvas js svg 写的画板/黑板程序

    兼容到IE9 canvas 画板 记录鼠标点 包含画笔大小设置 包含蜡笔 铅笔 毛笔 荧光笔设置

    【JavaScript源代码】js canvas实现五子棋小游戏.docx

    js canvas实现五子棋小游戏  本文实例为大家分享了canvas实现五子棋小游戏的具体代码,供大家参考,具体内容如下 效果 思路  canvans 绘制棋盘,绘制时候边缘预留棋子位置 监听点击事件绘制落子并记录到字典中...

    html5利用canvas绘画二级树形结构图的示例

    上周需要做一个把页面...不过还是记录一下研究成果。 下面是设计图: 做出效果如下: html、css代码就不贴了。 js主要用到了拖拽、canvas绘制。 function startDrag(ev) { ev.dataTransfer.setData("Text",ev.ta

    canvas烟花特效锦集

    canvas可以实现不同动画效果,本文主要记录几种不同节日烟花效果实现。   实现一 html <canvas id=canvas></canvas> css body { background: #000; margin: 0; } canvas { cursor: crosshair; display: ...

    Html5 canvas画图白板踩坑

    最近接手了一个小型的H5,最主要的功能大概就是拍照上传和canvas画板了。 主要是记录一下自己菜到像傻子一样的技术。 1、canvas画板隔空打牛!画布越往上部分错位距离越小,越往下距离越大。 2、图片上传!白板涂鸦...

    在小程序中使用canvas的方法示例

    所以一个小小的保存图片作为朋友圈相册封面的demo就这么出现了,在这里主要记录一下自己遇到的一些问题以及解决的办法。 截图: 效果图/制作页面/颜色选择 主要是以下几个问题: 1.颜色选择器 2.页面通信 3.组件...

    详解Canvas 跨域脱坑实践

    Canvas 跨域如何解决?这里记录下使用 Canvas 绘图过程中所遇到的跨域问题和解决方案。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    svgcanvas:提供SVG的元素API和上下文API

    请注意,此库还添加了一些脏API(例如调试的上下文API调用历史记录,gc一些不可见的元素)。 这些API太脏了,因此我没有提出对这些API的请求。 但是,它们对于我的很有用和必要,因此我将它们保留在我的lib中。 ...

    基于html5 canvas做批改作业的小插件

    今天公司有一个新的需求,就是要在返回的作业照片里面可以涂鸦批改,批改完后就连同批改后的照片上传到服务器。这对我不怎么熟悉canvas的人来说是个挑战... 当按下鼠标(mousedown)记录开始点startX, startY 当移动鼠标

Global site tag (gtag.js) - Google Analytics