技术中心

这里象征着我们的态度和能力

>应用双缓冲技术解决画面闪烁的问题
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-01-01      浏览次数:7163
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

  有些时候我们可能在J2ME中遇到画面闪烁的问题,这时候我们可以应用双缓冲的技术来解决,不过由于现在越来越多的手机自身就支持双缓冲了。所以这里只做个简单的介绍。

  我写了程序本来想在NOkia 6108上比较用和不用的区别,结果这个手机自己就支持双缓冲,所以根本没有比较出来。不过了解这个技术还是有必要的,所以我决定还是写出来。双缓冲本来是在开发PC应用程序的时候遇到的。在MIDP开发中同样存在,当你在屏幕上进行原始写画的时候,如果很复杂的话,用户会发现界面在闪烁。因此你可以这样做,首先在另一个图片上进行paint()得操作,当完成了以后就把它copy到屏幕上,由于通常copy得时候速度很快就不会出现闪烁了。这个技术就是双缓冲。

  Canvas类提供了isDoubleBuffered()方法来判断设备是不是支持这个功能,如果返回true的话,那么我们就没有必要使用双缓冲了,如果false的话,我们可以这么做:

  public DoubleCanvas(UIController uicontroller)

  {

  super();

  this.uicontroller = uicontroller;

  width = this.getWidth();

  height = this.getHeight();

  this.setCommandListener(this);

  if(!isDoubleBuffered())

  {

  offImage = Image.createImage(width,height);

  }

  }

  protected void paint(Graphics arg0)

  {

  arg0.drawString(isDoubleBuffered()+”",width/2,height/2,Graphics.HCENTER|Graphics.TOP);

  Graphics saved = arg0;

  if(offImage != null)

  {

  arg0 = offImage.getGraphics();

  }

  arg0.setColor(255,128,128);

  for(int i = 2,j=2;i<width/2-6&&j<height/2-6;i=i+2,j=j+2)

  {

  arg0.drawRect(i,j,width-2*i,height-2*j);

  }

  if(arg0 != saved)

  {

  saved.drawImage(offImage,0,0,Graphics.LEFT|Graphics.TOP);

  }

  }

  得到offImage得Graphics实例后,进行paint()得操作。这个部分通常比较复杂,我这里的不够复杂:)

  然后把offImage直接copy到屏幕上也就是执行saved.drawImage(offImage,0,0,Graphics.LEFT|Graphics.TOP);

  我写了一个应用程序来比较使用和不使用双缓冲的效果,但是由于我的手机支持双缓冲所以看不出效果,如果你有兴趣,那么可以把paint()部分的代码修改的复杂一些然后再移植到不支持的手机上也许可以看出效果,下面是我程序的代码:

  import javax.microedition.midlet.MIDlet;

  import javax.microedition.midlet.MIDletStateChangeException;

  public class DoubleBufferMIDlet extends MIDlet

  {

  private UIController uicontroller;

  protected void startApp() throws MIDletStateChangeException

  {

  uicontroller = new UIController(this);

  uicontroller.init();

  }

  protected void pauseApp()

  {

  }

  protected void destroyApp(boolean arg0) throws MIDletStateChangeException

  {

  }

  }

[1] [2] [3] [4] 下一页

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730