双缓冲技术实现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双缓冲技术实现画板应用实例,有需要的朋友可以参考下。