欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于Canvas的记录

程序员文章站 2022-08-10 21:34:39
      android 画图避免屏幕闪烁   在处理一些复杂的界面时,往往要用view,surfaceview来自己处理画图。比如用surfacevie...

 

 

 

android 画图避免屏幕闪烁


 

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

java代码:
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);
}
}

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

解决的办法其实非常简单,想起windows下开发解决画图闪烁的办法,先把要画的图先画好放在一张大的内存位图上,然后一下贴到屏幕。android其实也是一样的,上面的问题解决方法如下:

java代码:
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(); //记得回收内存位图


有空继续更新……