使用Universal-Image-Loader加載圖片
此第三方加載圖片的優勢:
- 多線程下載圖片,圖片可以來源於網絡,文件系統,項目文件夾assets中以及drawable中等
- 支持隨意的配置ImageLoader,例如線程池,圖片下載器,內存緩存策略,硬盤緩存策略,圖片顯示選項以及其他的一些配置
- 支持圖片的內存緩存,文件系統緩存或者SD卡緩存
- 支持圖片下載過程的監聽
- 根據控件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap佔用過多的內存
- 較好的控制圖片的加載過程,例如暫停圖片加載,重新開始加載圖片,一般使用在ListView,GridView中,滑動過程中暫停加載圖片,停止滑動的時候去加載圖片
- 提供在較慢的網絡下對圖片進行加載
1.需要配置相應的jar包(jar包百度一搜就有).
2.在Application文件裏複製以下代碼:
//創建默認的ImageLoader配置參數 加載圖片的庫. ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(configuration);3.添加權限:
- <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" />
DisplayImageOptions options = new DisplayImageOptions.Builder() .cacheInMemory(true)//是否緩存在內存中. .cacheOnDisk(true)//是否保存在SD卡中. .resetViewBeforeLoading(true)//接下來三行代碼最好有,不然用在listview會有複用問題. .displayer(new SimpleBitmapDisplayer()) .handler(new Handler()) .build();5.加載圖片代碼.
ImageLoader.getInstance().displayImage(list.get(position - 1), datas.get(position - 1), options, new ImageLoadingListener() {//第一個參數爲圖片地址,第二個爲控件ID. @Override public void onLoadingStarted(String s, View view) { } @Override public void onLoadingFailed(String s, View view, FailReason failReason) { } @Override public void onLoadingComplete(String s, View view, Bitmap bitmap) { datas.get(position - 1).setImageBitmap(bitmap);//在此設置相應邏輯 progressBar.setVisibility(View.GONE);//關閉加載進度條. } @Override public void onLoadingCancelled(String s, View view) { } }, new ImageLoadingProgressListener() { @Override public void onProgressUpdate(String s, View view, int i, int i1) { progressBar.setVisibility(View.VISIBLE);//開啓加載進度條. } });6.參考文章地址(此文更詳細)
http://blog.csdn.net/xiaanming/article/details/26810303/
7.在listview中出現複用問題參考文章(主要是68樓的哥們的意見)
http://www.eoeandroid.com/thread-541113-5-1.html