日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )

發(fā)布時間:2025/6/17 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


作者 : 韓曙亮

轉(zhuǎn)載請注明出處 :?http://blog.csdn.net/shulianghan/article/details/50824912


相關地址介紹 :?

--?Universal Image Loader 項目 GitHub 官方地址?:?https://github.com/nostra13/Android-Universal-Image-Loader?.

-- Universal Image Loader 項目完整中文注釋版, 已經(jīng)將所有類都進行了中文注釋, 適合源碼學習參考?:?https://github.com/han1202012/Android-Quick-Develop/tree/master/lib_universal-image-loader?;




一. Universal-Image-Loader 簡介




1. 基本功能





基本功能 :?

-- 1. 多線程圖片加載 (同步|異步)

-- 2. 廣泛的 ImageLoader 定制, 線程執(zhí)行者, 下載, 編碼, 內(nèi)存 和 硬盤 緩存, 圖片顯示 等配置;

-- 3. 圖片展示的可選定制, 圖片存儲, 緩存切換, 編解碼操作, Bitmap 處理和展示;

-- 4. 圖片的內(nèi)存緩存 和 硬盤緩存, 硬盤包括設備的文件系統(tǒng) 或 SD 卡;

-- 5. 監(jiān)聽加載過程, 包括下載過程;






2. 可使用的 URI 地址種類





識別的 URI 地址 :?

-- 網(wǎng)絡資源 : "http://site.com/image.png" // from Web

-- 本地 SD 卡資源 : "file:///mnt/sdcard/image.png" // from SD card

-- 本地 SD 卡資源 (媒體資源) : "file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)

-- ContentProvider 圖片資源 : "content://media/external/images/media/13" // from content provider

-- ContentProvider 媒體資源 :"content://media/external/video/media/13" // from content provider (video thumbnail)

-- 工程中的 assets 目錄 : "assets://image.png" // from assets

-- 工程中的 res 目錄 : "drawable://" + R.drawable.img // from drawables (non-9patch images)






3. ImageLoader 簡單使用




ImageLoader 簡單使用 :?

-- 1. 獲取 ImageLoader : 獲取 ImageLoader 單例實例對象;

ImageLoader imageLoader = ImageLoader.getInstance();

-- 2. 加載圖片到 ImageView : 加載圖片, 將圖片解析成 Bitmap 對象, 并將 Bitmap 設置到 ImageView 中顯示, 或者 其它實現(xiàn)了 ImageAware 接口的 View 對象;

imageLoader.displayImage(imageUri, imageView);

-- 3. 異步加載圖片 : 加載圖片, 將圖片解析成 Bitmap 對象, 并在解析完成時返回, 解析返回不是實時同步的;

imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {// 執(zhí)行你想要對 Bitmap 對象進行的操作} });

-- 4. 同步加載圖片 : 加載圖片文件, 將圖片文件解析成 Bitmap 對象, 并實時同步返回 Bitmap 對象;

Bitmap bmp = imageLoader.loadImageSync(imageUri);



4. ImageLoader 完整使用




ImageLoader 完整使用?:?

--? 1. 加載圖片到 ImageView ?: 加載圖片, 將圖片解析成 Bitmap 對象, 并將 Bitmap 設置到 ImageView 中顯示, 或者 其它實現(xiàn)了 ImageAware 接口的 View 對象;

// Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view // which implements ImageAware interface) imageLoader.displayImage(imageUri, imageView, options, new ImageLoadingListener() {@Overridepublic void onLoadingStarted(String imageUri, View view) {...}@Overridepublic void onLoadingFailed(String imageUri, View view, FailReason failReason) {...}@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {...}@Overridepublic void onLoadingCancelled(String imageUri, View view) {...} }, new ImageLoadingProgressListener() {@Overridepublic void onProgressUpdate(String imageUri, View view, int current, int total) {...} });

-- 2. 異步加載圖片 :?加載圖片, 將圖片解析成 Bitmap 對象, 并在解析完成時返回, 解析返回不是實時同步的;

// Load image, decode it to Bitmap and return Bitmap to callback ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size imageLoader.loadImage(imageUri, targetSize, options, new SimpleImageLoadingListener() {@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {// Do whatever you want with Bitmap} });

-- 3. 同步加載圖片 :?加載圖片文件, 將圖片文件解析成 Bitmap 對象, 并實時同步返回 Bitmap 對象;

// Load image, decode it to Bitmap and return Bitmap synchronously ImageSize targetSize = new ImageSize(80, 50); // result Bitmap will be fit to this size Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, options);




5. 使用步驟



(1) 引入庫的三種方式


引入 Universal-Image_Loader 庫 : 使用以下每種方法都可以;

-- 1. 直接導入 JAR 包 : 下載地址?點擊打開鏈接, 將 jar 包導入到 Android 工程中;

-- 2. Maven 依賴 :?

<dependency><groupId>com.nostra13.universalimageloader</groupId><artifactId>universal-image-loader</artifactId><version>1.9.5</version> </dependency>
-- 3. Gradle 依賴 :?

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'



(2) 添加網(wǎng)絡存儲權(quán)限


Manifest 配置 : 使用本 JAR 包需要添加 網(wǎng)絡 和 內(nèi)存 讀寫權(quán)限;

<manifest><!-- Include following permission if you load images from Internet --><uses-permission android:name="android.permission.INTERNET" /><!-- Include following permission if you want to cache images on SD card --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />... </manifest>



(3) 首次初始化 ImageLoader


初始化 : 首次使用 Universal-Image-Loader 之前需要初始化, 初始化必須在一個 Context 中進行初始化;

-- 初始化方法 : 創(chuàng)建一個 ImageLoaderConfiguration, 并且使用 ImageLoader.getInstance().init() 方法進行初始化;

public class MyActivity extends Activity {@Overridepublic void onCreate() {super.onCreate();// Create global configuration and initialize ImageLoader with this configImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)....build();ImageLoader.getInstance().init(config);...} }

(4) 配置 ImageLoader


ImageLoader 配置簡介 :?

-- 配置全局性 (配置作用范圍) : ImageLoader 的 配置 (ImageLoaderConfiguration) 在應用全局中有效, 你只需要設置它一次.

-- 配置可選性 : 配置中所有的選項都是可選的;

-- 默認配置 : 可以查看?ImageLoaderConfiguration.java 類, 其中的默認值即默認配置;

/** {@value} */public static final int DEFAULT_THREAD_POOL_SIZE = 3;/** {@value} */public static final int DEFAULT_THREAD_PRIORITY = Thread.NORM_PRIORITY - 2;/** {@value} */public static final QueueProcessingType DEFAULT_TASK_PROCESSING_TYPE = QueueProcessingType.FIFO;private Context context;private int maxImageWidthForMemoryCache = 0;private int maxImageHeightForMemoryCache = 0;private int maxImageWidthForDiskCache = 0;private int maxImageHeightForDiskCache = 0;private BitmapProcessor processorForDiskCache = null;private Executor taskExecutor = null;private Executor taskExecutorForCachedImages = null;private boolean customExecutor = false;private boolean customExecutorForCachedImages = false;private int threadPoolSize = DEFAULT_THREAD_POOL_SIZE;private int threadPriority = DEFAULT_THREAD_PRIORITY;private boolean denyCacheImageMultipleSizesInMemory = false;private QueueProcessingType tasksProcessingType = DEFAULT_TASK_PROCESSING_TYPE;private int memoryCacheSize = 0;private long diskCacheSize = 0;private int diskCacheFileCount = 0;private MemoryCache memoryCache = null;private DiskCache diskCache = null;private FileNameGenerator diskCacheFileNameGenerator = null;private ImageDownloader downloader = null;private ImageDecoder decoder;private DisplayImageOptions defaultDisplayImageOptions = null;private boolean writeLogs = false;


-- 配置示例 : 所有配置的示例.

// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using. // See the sample project how to use ImageLoader correctly. File cacheDir = StorageUtils.getCacheDirectory(context); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context).memoryCacheExtraOptions(480, 800) // default = device screen dimensions.diskCacheExtraOptions(480, 800, null).taskExecutor(...).taskExecutorForCachedImages(...).threadPoolSize(3) // default.threadPriority(Thread.NORM_PRIORITY - 2) // default.tasksProcessingOrder(QueueProcessingType.FIFO) // default.denyCacheImageMultipleSizesInMemory().memoryCache(new LruMemoryCache(2 * 1024 * 1024)).memoryCacheSize(2 * 1024 * 1024).memoryCacheSizePercentage(13) // default.diskCache(new UnlimitedDiskCache(cacheDir)) // default.diskCacheSize(50 * 1024 * 1024).diskCacheFileCount(100).diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) // default.imageDownloader(new BaseImageDownloader(context)) // default.imageDecoder(new BaseImageDecoder()) // default.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default.writeDebugLogs().build();


(5) 展示選項


展示選項簡介 :?

-- 作用范圍 : 展示選項 (DisplayImageOptions) 只對每個展示任務 (Display Task) 有效 (ImageLoader.displayImage(...));

-- 展示任務 : 展示選項 (Display Options) 可以被應用于每個展示任務 (ImageLoader.displayImage(...) call);

-- 默認展示選項使用條件?: 如果展示選項沒有通過?ImageLoader.displayImage(...) 方法設置, 那么就會使用默認的展示選項;

-- 默認展示選項來源 : 展示選項是 配置類 調(diào)用 ddefaultDisplayImageOptions() 方法獲取,??如ImageLoaderConfiguration.defaultDisplayImageOptions(...) ;

-- 展示選項示例 :?

// DON'T COPY THIS CODE TO YOUR PROJECT! This is just example of ALL options using. // See the sample project how to use ImageLoader correctly. DisplayImageOptions options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) // resource or drawable.showImageForEmptyUri(R.drawable.ic_empty) // resource or drawable.showImageOnFail(R.drawable.ic_error) // resource or drawable.resetViewBeforeLoading(false) // default.delayBeforeLoading(1000).cacheInMemory(false) // default.cacheOnDisk(false) // default.preProcessor(...).postProcessor(...).extraForDownloader(...).considerExifParams(false) // default.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default.bitmapConfig(Bitmap.Config.ARGB_8888) // default.decodingOptions(...).displayer(new SimpleBitmapDisplayer()) // default.handler(new Handler()) // default.build();






二. Universal-Image-Loader 示例代碼




示例代碼地址 :?https://github.com/han1202012/Android-Quick-Develop/tree/master/app_sample_universal-image-loader




1. ListView 中使用 UIL



ListView 中使用 UIL :?

-- 核心代碼 : 主要是在 ListView 的適配器中使用 UIL;

-- 設置展示選項 :?

options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) //設置加載時的圖片.showImageForEmptyUri(R.drawable.ic_empty) //設置沒有 Uri 地址時的圖片.showImageOnFail(R.drawable.ic_error) //設置加載失敗時的圖片.cacheInMemory(true) //設置內(nèi)存緩存.cacheOnDisk(true) //設置硬盤緩存.considerExifParams(true) //考慮相機參數(shù).displayer(new CircleBitmapDisplayer(Color.WHITE, 5))//設置加載器, 將圖片切成圓形展示出來.build();

-- 調(diào)用核心方法展示圖片 :?

ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.image, options, animateFirstListener);

-- 完整的 ListView 適配器代碼 :?

private static class ImageAdapter extends BaseAdapter {private static final String[] IMAGE_URLS = Constants.IMAGES_CN;private LayoutInflater inflater;private ImageLoadingListener animateFirstListener = new AnimateFirstDisplayListener();private DisplayImageOptions options;ImageAdapter(Context context) {inflater = LayoutInflater.from(context);options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) //設置加載時的圖片.showImageForEmptyUri(R.drawable.ic_empty) //設置沒有 Uri 地址時的圖片.showImageOnFail(R.drawable.ic_error) //設置加載失敗時的圖片.cacheInMemory(true) //設置內(nèi)存緩存.cacheOnDisk(true) //設置硬盤緩存.considerExifParams(true) //考慮相機參數(shù).displayer(new CircleBitmapDisplayer(Color.WHITE, 5))//設置加載器, 將圖片切成圓形展示出來.build();}@Overridepublic int getCount() {return IMAGE_URLS.length;}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {View view = convertView;final ViewHolder holder;if (convertView == null) {view = inflater.inflate(R.layout.item_list_image, parent, false);holder = new ViewHolder();holder.text = (TextView) view.findViewById(R.id.text);holder.image = (ImageView) view.findViewById(R.id.image);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}holder.text.setText("Item " + (position + 1));//加載 并 顯示圖片ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.image, options, animateFirstListener);return view;}static class ViewHolder {TextView text;ImageView image;}}

-- 效果圖 :?

?





2. GridView中使用 UIL





GridView 中使用 UIL?:?

--?核心代碼?: 主要是在 GridView 中的適配器中使用 UIL;

--?設置展示選項?:?

private DisplayImageOptions options;options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) //設置加載時顯示的圖片.showImageForEmptyUri(R.drawable.ic_empty) //設置 Uri 為 空時顯示的圖片.showImageOnFail(R.drawable.ic_error) //設置加載失敗顯示的圖片.cacheInMemory(true) //設置內(nèi)存緩存.cacheOnDisk(true) //設置磁盤緩存.considerExifParams(true) //考慮相機參數(shù).bitmapConfig(Bitmap.Config.RGB_565) //設置解碼參數(shù).build();

-- 設置加載 處理 監(jiān)聽器 : 在加載圖片時 可以設置加載監(jiān)聽器;

//加載 并 顯示圖片, 設置加載監(jiān)聽器 監(jiān)聽 開始加載 加載失敗 加載完成 事件ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() {@Overridepublic void onLoadingStarted(String imageUri, View view) {holder.progressBar.setProgress(0);holder.progressBar.setVisibility(View.VISIBLE);}@Overridepublic void onLoadingFailed(String imageUri, View view, FailReason failReason) {holder.progressBar.setVisibility(View.GONE);}@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {holder.progressBar.setVisibility(View.GONE);}}, new ImageLoadingProgressListener() {@Overridepublic void onProgressUpdate(String imageUri, View view, int current, int total) {holder.progressBar.setProgress(Math.round(100.0f * current / total));}});

-- 完整的 GridView 適配器代碼 :?

private static class ImageAdapter extends BaseAdapter {private static final String[] IMAGE_URLS = Constants.IMAGES_CN;private LayoutInflater inflater;private DisplayImageOptions options;ImageAdapter(Context context) {inflater = LayoutInflater.from(context);options = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.ic_stub) //設置加載時顯示的圖片.showImageForEmptyUri(R.drawable.ic_empty) //設置 Uri 為 空時顯示的圖片.showImageOnFail(R.drawable.ic_error) //設置加載失敗顯示的圖片.cacheInMemory(true) //設置內(nèi)存緩存.cacheOnDisk(true) //設置磁盤緩存.considerExifParams(true) //考慮相機參數(shù).bitmapConfig(Bitmap.Config.RGB_565) //設置解碼參數(shù).build();}@Overridepublic int getCount() {return IMAGE_URLS.length;}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {final ViewHolder holder;View view = convertView;if (view == null) {view = inflater.inflate(R.layout.item_grid_image, parent, false);holder = new ViewHolder();assert view != null;holder.imageView = (ImageView) view.findViewById(R.id.image);holder.progressBar = (ProgressBar) view.findViewById(R.id.progress);view.setTag(holder);} else {holder = (ViewHolder) view.getTag();}//加載 并 顯示圖片, 設置加載監(jiān)聽器 監(jiān)聽 開始加載 加載失敗 加載完成 事件ImageLoader.getInstance().displayImage(IMAGE_URLS[position], holder.imageView, options, new SimpleImageLoadingListener() {@Overridepublic void onLoadingStarted(String imageUri, View view) {holder.progressBar.setProgress(0);holder.progressBar.setVisibility(View.VISIBLE);}@Overridepublic void onLoadingFailed(String imageUri, View view, FailReason failReason) {holder.progressBar.setVisibility(View.GONE);}@Overridepublic void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {holder.progressBar.setVisibility(View.GONE);}}, new ImageLoadingProgressListener() {@Overridepublic void onProgressUpdate(String imageUri, View view, int current, int total) {holder.progressBar.setProgress(Math.round(100.0f * current / total));}});return view;}static class ViewHolder {ImageView imageView;ProgressBar progressBar;}}



-- 顯示效果 :?

?

作者?:?韓曙亮

轉(zhuǎn)載請注明出處?:?http://blog.csdn.net/shulianghan/article/details/50824912


總結(jié)

以上是生活随笔為你收集整理的【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产一区二区中文字幕 | 操碰在线观看 | 91精产品一区观看 | 亚洲综合一区二区 | 国产精品96久久久久久 | 91精品一区二区三区四区 | 五月天视频网站 | 午夜色网站 | 免费的三级网站 | 欧美天天爽 | 岳奶大又白下面又肥又黑水多 | 爱情岛成人 | 欧美亚洲视频 | 国产一级做a爰片久久毛片男 | av二区在线 | 久久不射网站 | 欧美日韩69 | mdyd—856冲田杏梨在线 | 日本一区二区在线视频 | 在线观看国产一级片 | 会喷水的亲姐姐 | 一区二区三区 欧美 | 日韩va中文 | 国产黄色免费在线观看 | 亚洲经典在线 | 日韩中文在线视频 | 99久热在线精品996热是什么 | 国产黄色的视频 | www.sesehu.com| 精品国产免费看 | 九九天堂网 | 91久久久久国产一区二区 | 神马午夜伦理影院 | 第一色影院| 亚洲中文字幕视频一区 | 欧美专区在线播放 | 午夜影院在线观看18 | 午夜黄色在线 | 成人一区二区三区仙踪林 | 大地av | 日本一二三区在线 | 蜜桃视频成人在线观看 | 无码人妻精品一区二区三 | 精品日韩视频 | 中文文字幕一区二区三三 | 成人精品免费视频 | 成人av网址在线 | 国产日韩av一区二区 | 日毛片 | 国产三级三级在线观看 | 久久靠逼视频 | 国产一二区在线观看 | h色视频在线观看 | av网站免费在线观看 | 香蕉久久av一区二区三区 | 国产精品资源网 | 刘亦菲毛片一区二区三区 | 国产欧美久久久久 | 深夜视频免费在线观看 | 日本免费一区二区三区视频 | 国产精品自拍片 | 色福利视频| 精品久久久久久亚洲 | 内射一区二区三区 | 九九午夜 | 欧美国产大片 | 亚洲精品视频国产 | 欧洲一二三区 | 色多多视频在线观看 | 538精品一线 | 熟妇人妻一区二区三区四区 | 男人的天堂在线播放 | 手机成人在线 | 成人片在线免费看 | 久久水蜜桃 | 女人av| 岛国二区三区 | 欧美一级色片 | 久久综合亚洲精品 | 亚洲一级中文字幕 | 国产中文字幕亚洲 | 中日韩在线观看 | 久久91亚洲人成电影网站 | 丰满少妇一区二区三区 | 成人免费网视频 | 国产精品视频久久久久 | 操操操综合 | 日韩香蕉视频 | 国产精品久久久久野外 | 三级视频在线播放 | 国产日韩一区二区三区 | 黑人一区二区三区四区五区 | 国产欧美久久久久 | 天天艹天天射 | 麻豆视频免费观看 | 亚洲色婷婷一区二区三区 | 日本性视频网站 | 大片av| 黄色avav|