双缓冲技术实现Android 画板应用
什么是双缓冲技术?双缓冲技术就是当用户操作界面完成后,会有一个缓冲区保存用户操作的结果。
为什么要使用双缓冲技术?拿Android游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容。
如何实现双缓冲?使用一个Bitmap对象保留之前的画布即可。
packagecom.example.phonegaptest;
importandroid.content.Context;
importandroid.graphics.Bitmap;
importandroid.graphics.Bitmap.Config;
importandroid.graphics.Canvas;
importandroid.graphics.Color;
importandroid.graphics.Paint;
importandroid.graphics.Path;
importandroid.util.AttributeSet;
importandroid.view.MotionEvent;
importandroid.view.View;
publicclassDrawViewextendsView{
floatpreX;
floatpreY;
privatePathpath;
publicPaintpaint=null;
finalintVIEW_WIDTH=320;
finalintVIEW_HEIGHT=480;
BitmapcacheBitmap=null;
CanvascacheCanvas=null;
publicDrawView(Contextcontext,AttributeSetset){
super(context,set);
cacheBitmap=Bitmap.createBitmap(VIEW_WIDTH,VIEW_HEIGHT,
Config.ARGB_8888);
cacheCanvas=newCanvas();
path=newPath();
cacheCanvas.setBitmap(cacheBitmap);
paint=newPaint(Paint.DITHER_FLAG);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
paint.setAntiAlias(true);
paint.setDither(true);
}
@Override
publicbooleanonTouchEvent(MotionEventevent){
floatx=event.getX();
floaty=event.getY();
switch(event.getAction()){
caseMotionEvent.ACTION_DOWN:
path.moveTo(x,y);
preX=x;
preY=y;
break;
caseMotionEvent.ACTION_MOVE:
path.quadTo(preX,preY,x,y);
preX=x;
preY=y;
break;
caseMotionEvent.ACTION_UP:
cacheCanvas.drawPath(path,paint);
path.reset();
break;
}
invalidate();
returntrue;
}
@Override
protectedvoidonDraw(Canvascanvas){
super.onDraw(canvas);
PaintbmpPaint=newPaint();
canvas.drawBitmap(cacheBitmap,0,0,bmpPaint);
canvas.drawPath(path,paint);
}
}
以上就是对Android双缓冲技术实现画板应用实例,有需要的朋友可以参考下。