xxhy 2013-03-19
一、View是没有缓存机制的,每次绘图都是重新绘制
如果要实用双缓冲机制的话。
1、自定义一个View 实现onDraw方法
2、调用这个方法,调用刷新onDraw()方法
ssinView.postInvalidate();
需要格外创建一个Canvas,每次都
3、
public void onDraw(Canvas canvas){ if(x >= 480){ x = 0; //清空画布 canvas.drawColor(Color.BLACK); //重新创建一个新的图 bitmap = Bitmap.createBitmap(480, 104, Config.ARGB_8888); }else{ //在缓冲中将之前的图绘制好,然后在真正的Canvas上绘制缓冲中的图 Canvas c = new Canvas(); c.setBitmap(bitmap); int y = (int)(A*Math.sin(x/180.0f*Math.PI)); System.out.println("==================y:"+y+"===x:"+x); c.drawPoint(x, y+A, paint); //canvas.save(); canvas.drawBitmap(bitmap, 0, 0,paint); x+=5; } }
二、Surface实现了双缓冲技术
提供了一个类SurfaceHolder
1、继承SurfaceView 实现Callback接口(在new SurfaceView的时候会自动回调)
2、刷新SurfaceView
// TODO Auto-generated method stub super.run(); while(flag == true){ //锁定,获得Canvas Canvas canvas = surfaceHolder.lockCanvas(null); onDraw(canvas); //释放锁 surfaceHolder.unlockCanvasAndPost(canvas); asinSurfaceView.x += 5; try { Thread.sleep(sleepTime); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }