首先我们需要创建一张屏幕大小的缓冲图片,我说一下第三个参数 ARGB 分别代表的是 透明度 红色 绿色 蓝色
Bitmap.Config ARGB_4444 ARGB 分别占四位
Bitmap.Config ARGB_8888 ARGB 分别占八位
Bitmap.Config RGB_565 没有透明度(A) R占5位 G 占6位 B占5位
一般情况下我们使用ARGB_8888 因为它的效果是最好了 当然它也是最占内存的。
mBufferBitmap = Bitmap.createBitmap(mScreenWidth,mScreenHeight,Config.ARGB_8888);
创建一个缓冲的画布,将内容绘制在缓冲区mBufferBitmap中
Canvas mCanvas = new Canvas(); mCanvas.setBitmap(mBufferBitmap);
最后一次性的把缓冲区mBufferBitmap绘制在屏幕上,怎么样 简单吧 呵呵。
@Override protected void onDraw(Canvas canvas) { /**这里先把所有须要绘制的资源绘制到mBufferBitmap上**/ /**绘制地图**/ DrawMap(mCanvas,mPaint,mBitmap); /**绘制动画**/ RenderAnimation(mCanvas); /**更新动画**/ UpdateAnimation(); if(isBorderCollision) { DrawCollision(mCanvas,"与边界发生碰撞"); } if(isAcotrCollision) { DrawCollision(mCanvas,"与实体层发生碰撞"); } if(isPersonCollision) { DrawCollision(mCanvas,"与NPC发生碰撞"); } /**最后通过canvas一次性的把mBufferBitmap绘制到屏幕上**/ canvas.drawBitmap(mBufferBitmap, 0,0, mPaint); super.onDraw(canvas); }
由此可见view属于被动刷新, 因为我们做的任何刷新的操作实际上都是通知UI线程去刷新。所以在做一些不用频繁去刷新绘制的项目可以使用view来操作。