android雙緩衝繪圖,避免螢幕閃爍

來源:互聯網
上載者:User

在處理一些複雜的介面時,往往要用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);  
     }  
 }
 
控制它左右平移時,會發現螢幕非常閃爍,眼睛看著會非常累。研究以後發現,這是因為兩張圖是依次一張一張貼到螢幕上的,如果重新整理頻率高的話,會使螢幕非常的閃爍。
解決的辦法其實非常簡單,想起J2ME下開發解決畫圖閃爍的辦法,先把要畫的圖先畫好放在一張大的記憶體位元影像上,然後一下貼到螢幕。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(); //記得回收記憶體位元影像
 
這樣處理後,view重新整理將變得平滑,眼睛看著舒服多了。


摘自 wanghao_happy的專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.