Android 自用双缓冲小例子:采用双缓冲实现画图板
来源:互联网 发布:2016淘宝京东市场份额 编辑:程序博客网 时间:2024/05/16 10:52
所谓的双缓冲技术其实是,当程序需要在指定View上进行绘制时,并不直接绘制到该View组件上,而是先绘制到一个内存中的Bitmap图片(这就是缓冲)上,等到内存中的Bitmap绘制好之后,再一次性地将Bitmap绘制到View组件上。
自定义View代码如下。
import android.content.Context;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.view.MotionEvent;import android.view.View;public class DrawView extends View {float preX;float preY;private Path path;public Paint paint = null;final int VIEW_WIDTH=320;final int VIEW_HEIGHT=480;// 定义一个内存中的图片,该图片将作为缓冲区Bitmap cacheBitmap =null;//定义 cacheBitmap上的Canvas对象Canvas cacheCanvas = null;public DrawView(Context context) {super(context);//创建一个与该View相同大小的缓存区cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH,VIEW_HEIGHT,Config.ARGB_8888);cacheCanvas = new Canvas();path = new Path();//设置cacheCanvas将会绘制到内存中的cacheBitmap上cacheCanvas.setBitmap(cacheBitmap);paint = new Paint(Paint.DITHER_FLAG);paint.setColor(Color.RED);//设置画笔风格paint.setStyle(Paint.Style.STROKE);paint.setStrokeWidth(1);//反锯齿paint.setAntiAlias(true);paint.setDither(true);}@Overridepublic 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://向缓冲绘图cacheCanvas.drawPath(path, paint);path.reset();break;default:break;}invalidate();//返回true表明处理方法已经处理该事件return true;}@Overrideprotected void onDraw(Canvas canvas) {Paint bmpPaint = new Paint();//将cacheBitmap绘制到该View组件上canvas.drawBitmap(cacheBitmap, 0,0, bmpPaint);//沿着path绘制canvas.drawPath(path, bmpPaint);}}
这个例子说明用canvas.drawBitmap( )方法时,参数里的bitmap改变,绘制的组件也会随着改变
- Android 自用双缓冲小例子:采用双缓冲实现画图板
- 采用双缓冲实现画图板
- Android图形与图像处理-采用双缓冲实现画图板
- Android 双缓冲画图板,有实现Menu菜单部分
- 使用双缓冲技术实现简单画图板
- Android采用双缓冲实现画板
- 采用双缓冲机制实现画图面板
- 画图板(一)MFC双缓冲机制
- 如何实现双缓冲、vc双缓冲
- 如何实现双缓冲
- j2me实现双缓冲
- 画图实现双缓冲
- 如何实现双缓冲
- MFC 双缓冲实现
- 画图实现双缓冲
- GDI+ 双缓冲实现
- GDI+ 双缓冲实现
- 如何实现双缓冲
- linux时钟浅析
- 如何增加VirtualBox虚拟机硬盘大小
- Vista Aero 效果的纯 DWM API 实现,以及发光字 etc
- 直接拿来用!最火的Android开源项目
- [gotoac]高斯消元
- Android 自用双缓冲小例子:采用双缓冲实现画图板
- solr4.0 replica collection core shard slice 概念阐述 .
- 认识 StringBuffer及其常用操作方法
- mysql数据类型
- 大型网站架构演变和知识体系
- Understanding Caching in Hibernate – Part One : The Session Cache
- Eclipse 使用相对路径 导入jar包
- activiti5.12.1 1、Task标签的属性
- 第十一周 领会继承以及基类、派生类中构造函数的写法以及执行过程