本文实例为大家分享了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,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,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软件编程有所帮助。
总结以上是内存溢出为你收集整理的Android采用双缓冲技术实现画板全部内容,希望文章能够帮你解决Android采用双缓冲技术实现画板所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)