Android ListView實現(xiàn)ImageLoader圖片加載的方法
本文實例講述了Android ListView實現(xiàn)ImageLoader圖片加載的方法。分享給大家供大家參考,具體如下:
最近一直忙著做項目,今天也是忙里偷閑,想寫篇博客來鞏固下之前在應用中所用的知識。之前我們可能會也會肯定遇到了圖片的異步加載問題,然而我們也可能會遇到圖片二次或多次加載,這是ListView的特性造成的,具體原因不在這里討論,又或者是OOM等問題。今天要講的是一個開源框架Imageloader,個人覺得非常的好用。
該框架在github的地址。https://github.com/nostra13/Android-Universal-Image-Loader。我們可以先看看這個開源庫存在哪些特征:
① .多線程下載圖片,圖片可以來源于網(wǎng)絡,文件系統(tǒng),項目文件夾assets中以及drawable中等
② .支持隨意的配置ImageLoader,例如線程池,圖片下載器,內(nèi)存緩存策略,硬盤緩存策略,圖片顯示選項以及其他的一些配置
③ . 支持圖片的內(nèi)存緩存,文件系統(tǒng)緩存或者SD卡緩存
④ .支持圖片下載過程的監(jiān)聽
⑤ .根據(jù)控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap占用過多的內(nèi)存
⑥ .較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載圖片,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片
⑦ .提供在較慢的網(wǎng)絡下對圖片進行加載
下面就直接進入正題:
1.我們需要去github下載imageloader的jar包,網(wǎng)址上面已經(jīng)給了,然后放在你的開發(fā)環(huán)境中,具體怎么操作大家都會的。
2.配置Android Manifest文件
<manifest> <uses-permission android:name="android.permission.INTERNET" /> <!-- Include next permission if you want to allow UIL to cache images on SD card --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... <application android:name="MyApplication"> ... </application> </manifest>
3.首先我們要新建一個MyApplication,繼承于application,在oncreate進行配置ImageLoader配置。你可以參照下面的代碼。
private void initImageLoader(Context context) { ImageLoaderConfiguration.Builder config = new ImageLoaderConfiguration.Builder(context); config.threadPoolSize(3); config.memoryCache(new WeakMemoryCache()); config.threadPriority(Thread.NORM_PRIORITY - 2); config.denyCacheImageMultipleSizesInMemory(); config.diskCacheFileNameGenerator(new Md5FileNameGenerator()); config.diskCacheSize(50 * 1024 * 1024); // 50 MiB config.tasksProcessingOrder(QueueProcessingType.LIFO); ImageLoader.getInstance().init(config.build()); }
在onCreate中調(diào)用下即可。
4.設置圖片顯示屬性
DisplayImageOptions options=new DisplayImageOptions.Builder() // .showStubImage(R.mipmap.ic_launcher) // 設置圖片下載期間顯示的圖片 .showImageForEmptyUri(R.mipmap.ic_launcher) // 設置圖片Uri為空或是錯誤的時候顯示的圖片 //.showImageOnFail(R.mipmap.ic_launcher) // 設置圖片加載或解碼過程中發(fā)生錯誤顯示的圖片 .cacheInMemory(true) // 設置下載的圖片是否緩存在內(nèi)存中 .cacheOnDisc(true) // 設置下載的圖片是否緩存在SD卡中 .build(); // 創(chuàng)建配置過得DisplayImageOption對象
5.通過調(diào)用displayImage來顯示圖片
ImageLoader.getInstance().displayImage(url,viewHolder.imageView,options); //第一個參數(shù),圖片地址URL;第二個參數(shù):布局控件;第三個參數(shù):圖片屬性。
這樣就可以完成圖片的加載。
當然 這樣做會有個小問題,就是圖片會加載兩次。原因是下載圖片之前會緩存一次,后面又會緩存一次,具體原因可以自行百度。我就不在這里討論了。只需要把上面的代碼換成下面這個就好了。直接上代碼
ImageLoader.getInstance().displayImage (url,new ImageViewAware(viewHolder.imageView,false),options);//解決圖片重復加載問題
好了 ,Imageloader就講到這里了 ,有什么問題還希望大家指出來。
更多關于Android相關內(nèi)容感興趣的讀者可查看本站專題:《Android圖形與圖像處理技巧總結》、《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android基本組件用法總結》、《Android視圖View技巧總結》、《Android布局layout技巧總結》及《Android控件用法總結》
希望本文所述對大家Android程序設計有所幫助。
相關文章
Android屏幕適配工具類 Android自動生成不同分辨率的值
這篇文章主要為大家詳細介紹了Android屏幕適配工具類,Android自動生成不同分辨率的值,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03Android保存的文件顯示到文件管理的最近文件和下載列表中的方法
這篇記錄的是Android中如何把我們往存儲中寫入的文件,如何顯示到文件管理的下載列表、最近文件列表中,需要的朋友可以參考下2020-01-01Android利用HorizontalScrollView仿ViewPager設計簡單相冊
這篇文章主要介紹了Android利用HorizontalScrollView仿ViewPager設計簡單相冊的相關資料,需要的朋友可以參考下2016-05-05flutter實現(xiàn)掃碼槍獲取數(shù)據(jù)源禁止系統(tǒng)鍵盤彈窗示例詳解
這篇文章主要為大家介紹了flutter實現(xiàn)掃碼槍獲取數(shù)據(jù)源禁止系統(tǒng)鍵盤彈窗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Android Studio無法執(zhí)行Java類的main方法問題及解決方法
這篇文章主要介紹了Android Studio無法執(zhí)行Java main方法的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03