2011-06-01 75 views
0

這是我想要做的:我試圖加載一系列位圖來顯示動畫。這意味着我需要有一個下降fps(24 fps)。我需要加載不超過10秒的動畫或大約300個位圖。由於這是一個動態壁紙,我只能手動繪製每一幀。畫布中更好的幀率繪製位圖(第2部分)?

這裏是我試過到目前爲止:

  1. 明顯的策略:加載每個位每幀繪製。這很慢。
  2. 使用緩存。我把位圖加載到一個單獨的線程中。大約20個位圖緩存連續加載到後臺。但是,我仍然表現不佳(大約10 fps)。罪魁禍首是緩慢的位圖加載。
  3. 我打算嘗試使用OpenGL,但後來我意識到,即使使用OpenGL,緩慢的位圖加載仍然是一個問題。對? (或者我錯了嗎?)

那麼我還可以使用其他哪些策略?下面是我的想法:如果我使用openGL,我可以使用更小的位圖(因爲它可以提供更好的縮放比例)。也許那時我可以有一個更大的緩存 - 也許說3秒。有了更大的緩存,緩慢的位圖加載不會是個問題,對吧?

其他策略?


哦,這是我目前的位圖裝載功能:

void loadNthBitmap(int i, int n) { 
    try { 
    buf = new 
     BufferedInputStream(assets. 
       open(folder+"/" 
        +imageList[n]) 
       ); 
    tmpBitmap = BitmapFactory. 
     decodeStream(buf); 
    rbitmap[i] = Bitmap.createBitmap 
     (tmpBitmap, 
     0,0,imageWidth,imageHeight, 
     transMatrix,false); 
    } 
    catch(IOException e) {} 
} 

其中imageList是預先定義的資產清單和transMatrix是旋轉和縮放矩陣。

回答

1

你想要做什麼(即全畫面動畫)並不容易。幾乎所有的Android動畫(從SDK中的Lunar Lander示例到憤怒的小鳥)都包含在相對靜態的背景上移動小精靈。

的「明顯」的解決問題的方法是把你的動畫成MPEG,然後將其作爲視頻動態壁紙解碼,複製,這傢伙把這裏的做法:這是http://forum.xda-developers.com/showthread.php?t=804720(替代鏈接http://android.ccpcreations.com/vlw/

+0

一個開始。按照RockPlayer的方法,我的測試視頻速度大約爲10 fps。這種方法使用FFmpeg,NDK和OpenGL紋理。可能,我應該使用幀緩衝區。 – 2011-06-15 01:24:16

+0

@ u-avalos感謝您的接受/讚揚。你顯然是一個非常嚴肅的編碼員。祝你的項目好運。 :-) – 2011-06-15 02:46:07

+0

@ u-avalos在http://android.ccpcreations.com/vlw/vlw-faq的常見問題中,VLW傢伙聲稱〜24 fps @ 480x854,並且有一些編解碼器的建議。 – 2011-06-15 14:48:17