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改变,绘制的组件也会随着改变

原创粉丝点击