我正在製作媒體播放器應用程序,並希望加載專輯圖像以在ListView中顯示。現在它可以很好地處理我從last.fm自動下載的圖像,這些圖像在500x500 png以下。不過,我最近添加了另一個面板到我的應用程序,允許查看全屏幕作品,所以我已經用一些大的(1024x1024)PNG取代了我的一些作品。以縮略圖加載許多大型位圖圖像 - Android
現在,當我滾動多個具有高分辨率圖形的相冊時,我的BitmapFactory上出現java.lang.OutOfMemoryError。
static public Bitmap getAlbumArtFromCache(String artist, String album, Context c)
{
Bitmap artwork = null;
File dirfile = new File(SourceListOperations.getAlbumArtPath(c));
dirfile.mkdirs();
String artfilepath = SourceListOperations.getAlbumArtPath(c) + File.separator + SourceListOperations.makeFilename(artist) + "_" + SourceListOperations.makeFilename(album) + ".png";
File infile = new File(artfilepath);
try
{
artwork = BitmapFactory.decodeFile(infile.getAbsolutePath());
}catch(Exception e){}
if(artwork == null)
{
try
{
artwork = BitmapFactory.decodeResource(c.getResources(), R.drawable.icon);
}catch(Exception ex){}
}
return artwork;
}
有什麼我可以添加到限制所產生的位圖對象的大小來說,256x256?這就是縮略圖需要做的更大的工作,我可以製作一個重複的函數或參數來獲取全尺寸圖形以顯示全屏。
另外,我正在將這些位圖顯示在小圖像上,大約150x150到200x200。較小的圖像比較大的圖像比較好。是否有任何方法可以應用縮小過濾器來平滑圖像(也許是抗鋸齒)?如果我不需要,我不想緩存一堆其他縮略圖文件,因爲這會使管理圖片圖像變得更加困難(目前您只需在目錄中轉儲新的縮略圖文件,並且它們將在下次自動使用他們得到加載)。
完整的代碼位於src/com/calcprogrammer1/calctunes/AlbumArtManager.java中的http://github.org/CalcProgrammer1/CalcTunes,儘管其他函數沒有多少區別(如果圖像丟失,可以返回檢查last.fm)。
使用懶惰列表或通用圖像加載程序。隨着這個http://developer.android.com/training/improving-layouts/smooth-scrolling.html。 Lazy List和UIL加載縮小版的位圖。 http://stackoverflow.com/questions/15621936/whats-lazylist – Raghunandan 2013-05-05 09:56:24