亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

應用雙緩沖技術解決畫面閃爍的問題

2019-11-18 16:08:07
字體:
來源:轉載
供稿:網友

    有些時候我們可能在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.HCENTERGraphics.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.LEFTGraphics.TOP);
        }

    }

得到offImage得Graphics實例后,進行paint()得操作。這個部分通常比較復雜,我這里的不夠復雜:)
然后把offImage直接copy到屏幕上也就是執行saved.drawImage(offImage,0,0,Graphics.LEFTGraphics.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
    {
        }

}

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;


public class MainListUI extends List implements CommandListener
{
    private UIController uicontroller;
   
   
    public MainListUI(UIController uicontroller)
    {
        super("Test",List.IMPLICIT);
        this.uicontroller = uicontroller;
        this.append("Non-buffer",null);
        this.append("Double-buffer",null);
        this.setCommandListener(this);
    }
   
    public void commandAction(Command arg0, Displayable arg1)
    {

        if(arg0 == List.SELECT_COMMAND)
        {
            if(this.getSelectedIndex() == 0)
            {
               
                uicontroller.handleEvent(UIController.EventID.DISPLAY_NON_BUFFER);
            }
            else
            {
               
                uicontroller.handleEvent(UIController.EventID.DISPLAY_BUFFER);
            }
        }
       


    }

}

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;


public class UIController implements CommandListener
{

    private Display display;
    private DoubleBufferMIDlet midlet;
    private MainListUI mainList;
    private NonDoubleCanvas noDoubleCanvas;
    private DoubleCanvas doubleCanvas;
    public static final Command backCommand = new Command("Back",Command.BACK,2);
   
    public static class EventID
    {
        public static final int DISPLAY_NON_BUFFER = 0;
        public static final int DISPLAY_BUFFER = 1;
    }
    
  
    public UIController(DoubleBufferMIDlet midlet)
    {
        this.midlet = midlet;
    }
   
    public void init()
    {
        display = Display.getDisplay(midlet);
        mainList = new MainListUI(this);
        noDoubleCanvas = new NonDoubleCanvas(this);
        doubleCanvas = new DoubleCanvas(this);
        addCommand();
        display.setCurrent(mainList);
    }
   
    public void addCommand()
    {
        noDoubleCanvas.addCommand(backCommand);
        doubleCanvas.addCommand(backCommand);
    }
   
    public Display getDisplay()
    {
        return display;
    }
   
    public void setCurrent(Displayable disp)
    {
        display.setCurrent(disp);
    }
   
    public void handleEvent(int eventID)
    {
        switch(eventID)
        {
            case EventID.DISPLAY_BUFFER:
            {
                setCurrent(doubleCanvas);
                System.out.println(EventID.DISPLAY_BUFFER);
                break;
            }
            case EventID.DISPLAY_NON_BUFFER:
            {
                setCurrent(noDoubleCanvas);
                System.out.println(EventID.DISPLAY_NON_BUFFER);
                break;
            }
        }
    }
    public void commandAction(Command arg0, Displayable arg1)
    {
       
        if(arg0 == backCommand)
        {
            display.setCurrent(mainList);
        }


    }


}

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;


public class NonDoubleCanvas extends Canvas implements CommandListener
{
    
    private UIController uicontroller;
    private int width;
    private int height;
  
    public NonDoubleCanvas(UIController uicontroller)
    {
        super();
        this.uicontroller = uicontroller;
        width = this.getWidth();
        height = this.getHeight();
        this.setCommandListener(this);
    }

  
    protected void paint(Graphics arg0)
    {
       
        arg0.setColor(100,100,100);
        arg0.drawString(isDoubleBuffered()+"",width/2,height/2,Graphics.HCENTERGraphics.TOP);
        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);
        }

    }


    public void commandAction(Command arg0, Displayable arg1)
    {
        
        uicontroller.commandAction(arg0,arg1);
    }

}

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;


public class DoubleCanvas extends Canvas implements CommandListener
{

    
    private UIController uicontroller;
    private Image offImage;
    private int width;
    private int height;
    
    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.HCENTERGraphics.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.LEFTGraphics.TOP);
        }

    }


    public void commandAction(Command arg0, Displayable arg1)
    {
         uicontroller.commandAction(arg0,arg1);
    }

}

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品99国产精品酒店日本| 欧美亚洲成人网| 奇门遁甲1982国语版免费观看高清| 欧美精品日韩三级| 日韩av在线电影网| 国产成人免费91av在线| 精品国产区一区二区三区在线观看| 色偷偷噜噜噜亚洲男人的天堂| 日韩视频―中文字幕| 国产欧美一区二区| yw.139尤物在线精品视频| 成人黄色影片在线| 久久精品国产综合| 亚洲天堂男人天堂女人天堂| 亚洲色图偷窥自拍| 欧美激情国产高清| 欧美精品videossex性护士| 欧美精品手机在线| 俺去了亚洲欧美日韩| 国产成人91久久精品| 久久91亚洲精品中文字幕奶水| 7m第一福利500精品视频| 一本大道久久加勒比香蕉| 少妇久久久久久| 亚洲精品电影久久久| 黑人巨大精品欧美一区二区| 国产v综合v亚洲欧美久久| 亚洲小视频在线| 国产午夜一区二区| 一区二区三区在线播放欧美| 国产视频精品xxxx| 国产精品色午夜在线观看| 欧美日韩国产丝袜另类| 亚洲人高潮女人毛茸茸| 精品国产91久久久久久老师| 91探花福利精品国产自产在线| 日韩欧美亚洲一二三区| 欧美日韩中文字幕在线| 成人网在线观看| 国产九九精品视频| 成人有码在线视频| 欧美午夜无遮挡| 97视频在线观看视频免费视频| 亚洲欧美在线免费观看| 欧日韩在线观看| 91免费在线视频网站| 日本不卡高字幕在线2019| 亚洲在线免费观看| 亚洲国产日韩欧美在线99| 欧美成人精品在线播放| 日韩免费观看在线观看| 国产亚洲免费的视频看| 国产成人精品一区二区在线| 欧美视频在线看| 国产精品久久久久久网站| 亚洲国产精品悠悠久久琪琪| 性色av一区二区三区免费| 最新国产成人av网站网址麻豆| 国模私拍视频一区| 精品五月天久久| 国产日韩在线视频| 成人福利网站在线观看11| 亚洲精品久久久久中文字幕欢迎你| 久久久国产精品视频| 粗暴蹂躏中文一区二区三区| 国产精品夜色7777狼人| 91日韩在线视频| 国模精品视频一区二区三区| 国产亚洲人成网站在线观看| 欧美在线观看视频| 国产精品日韩在线观看| 中文字幕日韩在线视频| 国产精品久久久久久久久久新婚| 欧美中文字幕视频在线观看| 精品亚洲一区二区三区| 国产一区二区欧美日韩| 亚洲va欧美va在线观看| 亚洲最大成人免费视频| 欧美日韩午夜激情| 一区二区三区国产在线观看| 国产欧美日韩中文| 日韩欧美在线视频免费观看| 亚洲国产99精品国自产| 国产亚洲a∨片在线观看| 久久黄色av网站| 精品国产福利视频| 国产精品∨欧美精品v日韩精品| 91影院在线免费观看视频| 97久久久免费福利网址| 秋霞av国产精品一区| 免费99精品国产自在在线| 伊人久久久久久久久久| 日日骚久久av| 亚洲精品电影在线| 欧美做受高潮1| 国产精品成人一区| 久久免费视频观看| 91精品视频在线播放| 欧美国产欧美亚洲国产日韩mv天天看完整| 日韩亚洲精品电影| 在线电影av不卡网址| 国产91精品久久久| 精品国产福利在线| 亚洲人成亚洲人成在线观看| 欧美中文字幕视频在线观看| 日韩欧美在线中文字幕| 日韩免费观看视频| 高清日韩电视剧大全免费播放在线观看| 久久久爽爽爽美女图片| 亚洲第一男人av| 日韩在线观看免费高清| 亚洲第一免费网站| 亚洲激情成人网| 亚洲精品av在线播放| 亚洲精品中文字幕av| 欧美成人精品激情在线观看| 国产美女久久久| 色哟哟亚洲精品一区二区| 久久综合伊人77777蜜臀| 欧美精品18videos性欧| 国产精品高潮在线| 精品高清美女精品国产区| 在线观看免费高清视频97| 国产精品一区二区久久久久| 欧美在线视频观看免费网站| www.日韩av.com| 精品福利免费观看| 亚洲欧美日韩天堂| 欧美精品性视频| 色www亚洲国产张柏芝| 亚洲风情亚aⅴ在线发布| 精品亚洲国产视频| 中文字幕亚洲天堂| 九九热精品视频在线播放| 国产精品久久久久久久久久久久久久| 国产成人精品网站| 日韩av理论片| 日本精品中文字幕| 亚洲人成电影在线观看天堂色| 蜜臀久久99精品久久久久久宅男| 国产精品日韩在线| 欧美性生交xxxxxdddd| 亚洲黄一区二区| 57pao成人永久免费视频| 亚洲一区二区三区777| 久久九九全国免费精品观看| 国产午夜精品视频免费不卡69堂| 成人高h视频在线| 亚洲精品97久久| 久久久精品在线| 国内伊人久久久久久网站视频| 免费99精品国产自在在线| 精品久久久国产| 欧美性猛交xxxx免费看漫画| 欧美日韩在线影院| 国语对白做受69| 国产精品美女免费视频| 日韩精品免费在线播放| 成人妇女免费播放久久久| 日本精品久久久久久久| 国产91在线播放九色快色| 欧美日韩一区二区免费在线观看| 亚洲一区二区三区四区视频| 97精品一区二区视频在线观看|