Android画图避免屏幕闪烁

2014-11-24 08:42:15 来源: 作者: 浏览: 1

在处理一些复杂的界面时,往往要用view,SurfaceView来自己处理画图。比如用SurfaceView来贴两张图,并控制他们左右平移,基本代码如下:


Canvas c = null;
try {
c = mSurfaceHolder.lockCanvas(null);
if (c != null) {
c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint); //画背景
c.drawBitmap(bm1, 0, 0, null);


c.drawBitmap(bm2,bm1.getWidth(), 0, null); //第二张图画在第一张旁边
}
} finally {
if (c != null) {
mSurfaceHolder.unlockCanvasAndPost(c);
}
}


控制它左右平移时,会发现屏幕非常闪烁,眼睛看着会非常累。研究以后发现,这是因为两张图是依次一张一张贴到屏幕上的,如果刷新频率高的话,会使屏幕非常的闪烁。


final Bitmap memBm = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.RGB_565);


final Canvas c = new Canvas(memBm);


c.setDrawFilter(mFilter);
c.drawRect(0, 0, c.getWidth(), c.getHeight(), mBGPaint); //画背景
c.drawBitmap(bm1, 0, 0, null);


c.drawBitmap(bm2,bm1.getWidth(), 0, null); //第二张图画在第一张旁边


Canvas render = null;
try {
render = mSurfaceHolder.lockCanvas();
if (render != null) {
render.drawBitmap(memBm, 0, 0, null);
}
} finally {
if (render != null)
mSurfaceHolder.unlockCanvasAndPost(render);
}


memBm.recycle(); //记得回收内存位图


这样处理后,view刷新将变得平滑,眼睛看着舒服多了。


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: