2011-10-08 30 views
4

我對動畫使用canvas.drawBitmap(Bitmap,src,dst,null)。我爲動畫使用1個平鋪圖像,每個平鋪圖像包含超過100個用於製作動畫的圖像。我已經把CLICKListner開始動畫。我如何立即響應onClick的動畫?canvas.drawBitmap()花費更多的時間在平鋪位圖時第一次繪製位圖

我已經按照下面的鏈接使用動畫邏輯。 http://warriormill.com/2009/10/adroid-game-development-part-1-gameloop-sprites/

@Override 
    public void draw(Canvas canvas) { 
     try 
     { 
      FrameInfo frameinfo= animations.get(currentAnimation).sequence.get(currentFrame); 
      Rect rclip = frameinfo.rect; 
      Rect dest = new Rect(this.getXpos(), getYpos(), getXpos() + (rclip.right - rclip.left), 
       getYpos() + (rclip.bottom - rclip.top)); 
      if(cf!=null) 
      { 
       //color filter code here 

      } 
      canvas.drawBitmap(tileSheet, rclip, dest, null); 
      update(); //after drawing update the frame counter 
     } 
     catch (Exception e) 
     { 
      Log.e("ERROR", "ERROR IN SPRITE TILE CODE:"+e.toString()+e.getStackTrace().toString()); 
     } 

    } 
+0

如果這只是第一次點擊的問題,您可以在oncreate中繪製位圖,然後在第一次點擊時用您已繪製的位圖來更新視圖。使用工作線程進行繪製也很好。 – Jakar

回答

1

資源加載需要時間顯著(他們是您的APK內部被壓縮),這麼多,你必須預先加載這些,並不僅僅是即時加載它們。 draw()方法是進行任何即時資源處理的最後一個地方。 你也應該在後臺做這件事,以避免ANR問題。 AsyncTask的實施工作非常棒! 您還需要非常小心匹配DPI,否則drawBitmap()會縮放您的位圖,這會顯着降低您的幀速率。 如果您有技能,請使用帶2D紋理貼圖的OpenGL。

相關問題