一般在使用Canvas組件刷新顯示圖片或者繪圖的時候,會產生閃爍。這是由於機制是先使用背景色對原有內容進行覆蓋,再往上面繪製新內容所引起的。我們看到的閃爍就是背景色和新內容之間的交替顯示。
下面爲Canvas中的update()方法的代碼
public void update(Graphics g) { g.clearRect(0, 0, width, height); paint(g); }
從上面可以看出,每當update的時候,首先用背景色對原有內容進行填充,然後再進行繪製。
下面利用雙緩衝技術消除閃爍。原理:在刷新之前將要刷新的內容在內存中準備好,刷新的時候不進行填充背景色,直接將內存中的內容畫出來。這就要重寫update()方法了。
下面爲重寫的update()方法代碼:
class graph extends Canvas { private Image buffer;//聲明圖片緩衝區 public void paint(Graphics g) { //畫圖代碼 } public void update(Graphics g) { buffer=createImage(getWidth(),getHeight());//創建圖片緩衝區 Graphics gBuffer=bufferImage.getGraphics();//獲得圖片緩衝區的畫筆 if(gBuffer!=null) paint(gBuffer); else paint(g); gBuffer.dispose(); g.drawImage(bufferImage, 0, 0,null); } }