Android采用双缓冲技术实现画板
程序员文章站
2024-02-29 19:19:16
本文实例为大家分享了android实现画板的具体代码,采用的技术是双缓冲技术,供大家参考,具体内容如下
1.双缓冲技术的概念
所谓的双缓冲技术其实很简单,当程序需要在指...
本文实例为大家分享了android实现画板的具体代码,采用的技术是双缓冲技术,供大家参考,具体内容如下
1.双缓冲技术的概念
所谓的双缓冲技术其实很简单,当程序需要在指定的view上进行绘制时,程序并不需要直接绘制到该view组件,而是先绘制到一个内存中的bitmap图片上(就是缓冲),等内存中的bitmap绘制好之后,再一次性将bitmap绘制到view组件上。
2.android采用双缓冲实现画板
实现的思路:
1).定义一个内存中图片,将他作为缓冲区bitmap cachebitmap = null;
2).定义缓冲区cache的canvas对象 canvas cachecanvas = null;
3).设置cachecanvas将会绘制到内存的bitmap上。
cachecanvas.setbitmap(cachebitmap);
4). 将cachebitmap绘制到该view上.
canvas.drawbitmap(cachebitmap,0,0,p);
3.代码实现
package com.lidong.android_ibrary.view; import android.content.context; import android.graphics.bitmap; import android.graphics.canvas; import android.graphics.color; import android.graphics.paint; import android.graphics.path; import android.util.attributeset; import android.view.motionevent; import android.view.view; /** *@类名 : drawview *@描述 : 使用双缓存技术实现绘制 *@时间 : 2016/4/26 9:18 *@作者: 李东 *@邮箱 : lidong@chni.com.cn *@company: chni */ public class drawview extends view { float prex; float prey; private path path; private paint paint = null; private int view_width = 800; private int view_height = 600; //定义一个内存中图片,将他作为缓冲区 bitmap cachebitmap = null; //定义缓冲区cache的canvas对象 canvas cachecanvas = null; public drawview(context context) { this(context,null); } public drawview(context context, attributeset attrs) { super(context, attrs); //创建一个与该view相同大小的缓冲区 cachebitmap = bitmap.createbitmap(view_width,view_height,bitmap.config.argb_8888); //创建缓冲区cache的canvas对象 cachecanvas = new canvas(); path = new path(); //设置cachecanvas将会绘制到内存的bitmap上 cachecanvas.setbitmap(cachebitmap); paint = new paint(); paint.setcolor(color.red); paint.setflags(paint.dither_flag); paint.setstyle(paint.style.stroke); paint.setstrokewidth(5); paint.setantialias(true); paint.setdither(true); } @override protected void ondraw(canvas canvas) { paint p = new paint(); //将cachebitmap绘制到该view canvas.drawbitmap(cachebitmap,0,0,p); canvas.drawpath(path,paint); } @override public boolean ontouchevent(motionevent event) { //获取拖动时间的发生位置 float x = event.getx(); float y = event.gety(); switch (event.getaction()){ case motionevent.action_down: path.moveto(x,y); prex = x; prey = y; break; case motionevent.action_move: path.quadto(prex,prey,x,y); prex = x; prey = y; break; case motionevent.action_up: //这是是调用了cachebitmap的canvas在绘制 cachecanvas.drawpath(path,paint); path.reset(); break; } invalidate();//在ui线程刷新view return true; } }
4.实现的效果
代码下载:android实现画板代码
以上就是本文的全部内容,希望对大家学习android软件编程有所帮助。
上一篇: SpringBoot个性化配置的方法步骤
下一篇: 计算机基础:域名以及跨域