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

歡迎訪問 生活随笔!

生活随笔

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

Android

Android-Universal-Image-Loader 的使用说明

發(fā)布時間:2023/12/10 Android 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android-Universal-Image-Loader 的使用说明 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個圖片異步載入并緩存的類已經(jīng)被非常多開發(fā)人員所使用,是最經(jīng)常使用的幾個開源庫之中的一個,主流的應用,隨便反編譯幾個火的項目,都能夠見到它的身影。

? ? ? ?但是有的人并不知道怎樣去使用這庫怎樣進行配置,網(wǎng)上查到的信息對于剛接觸的人來說可能太少了,以下我就把我使用過程中所知道的寫了下來,希望能夠幫助自己和別人更深入了解這個庫的使用和配置。?

? ? ? ? GITHUB上的下載路徑為:https://github.com/nostra13/Android-Universal-Image-Loader?,下載最新的庫文件,而且導入到項目的LIB下便能夠使用。

? ? ? ??該庫以及DEMO本地下載鏈接:下載地址

一、介紹


?Android-Universal-Image-Loader是一個開源的UI組件程序,該項目的目的是提供一個可反復使用的儀器為異步圖像載入,緩存和顯示。所以。假設(shè)你的程序里須要這個功能的話,那么最好還是試試它。由于已經(jīng)封裝好了一些類和方法。

我們 能夠直接拿來用了。

而不用反復去寫了。

事實上,寫一個這方面的程序還是比較麻煩的,要考慮多線程,緩存。內(nèi)存溢出等非常多方面。但是,你也能夠參考這個樣例來自己寫出更好的程序。在此為大家介紹一下:



二、特點


多線程的圖像載入
的可能性的寬調(diào)諧對ImageLoader的配置(線程池的大小,HTTP選項,內(nèi)存和光盤快速緩存,顯示圖像。以及其它)
的圖像的可能性中的緩存存儲器和/或設(shè)備的文件器系統(tǒng)(或SD卡)
能夠“聽”載入過程中
可自己定義每一個顯示的圖像調(diào)用分隔的選項
Widget支持
Android 1.5以上支持
簡單描寫敘述一下這個項目的結(jié)構(gòu):每一個圖片的載入和顯示任務都運行在獨立的線程中,除非這個圖片緩存在內(nèi)存中。這樣的情況下圖片會馬上顯示。假設(shè)須要的圖片緩存在本地,他們會開啟一個獨立的線程隊列。

假設(shè)在緩存中沒有正確的圖片。任務線程會從線程池中獲取。因此,快速顯示緩存圖片時不會有明顯的障礙。(別人那邊借鑒的這段)

流程圖:


?

三、用法

? 這是 一個開源的Android關(guān)于下載顯示圖片的工具類。在這個下載包里面jar文件,用于我們導入項目使用,詳細用法在包里面也含有。

以下是一個樣例:

[java]?view plaincopy
  • <uses-permission?android:name="android.permission.INTERNET"?/>??
  • <uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"?/>??
  • 由于是使用過程中會圖片獲取要通過網(wǎng)絡(luò)。而且有緩存設(shè)置。所以這2個權(quán)限必須要有。


    非常多人想知道怎樣設(shè)置緩存的文件夾,能夠通過以下方法:

    [java]?view plaincopy
  • File?cacheDir?=?StorageUtils.getOwnCacheDirectory(getApplicationContext(),?"imageloader/Cache");??
  • //這個是你希望的緩存文件的文件夾:imageloader/Cache

    之后在ImageLoaderConfiguration的配置文件里通過設(shè)置

    [java]?view plaincopy
  • .discCache(new?UnlimitedDiscCache(cacheDir))//自己定義緩存路徑??
  • 方法來設(shè)置該應用的圖片緩存路徑。


    以下我們就來開始看怎樣使用這個圖片異步載入庫把:


    一.

    ? ? ? ? 先要配置ImageLoaderConfiguration這個類實現(xiàn)全局ImageLoader的實現(xiàn)情況。

    能夠選擇在Application中初始化設(shè)置該類。

    [java]?view plaincopy
  • ImageLoaderConfiguration?config?=?new?ImageLoaderConfiguration??
  • ????.Builder(context)??
  • ????.memoryCacheExtraOptions(480,?800)?//?max?width,?max?height,即保存的每一個緩存文件的最大長寬??
  • ????.discCacheExtraOptions(480,?800,?CompressFormat.JPEG,?75,?null)?//?Can?slow?ImageLoader,?use?it?carefully?(Better?don't?use?it)/設(shè)置緩存的詳細信息,最好不要設(shè)置這個??
  • ????.threadPoolSize(3)//線程池內(nèi)載入的數(shù)量??
  • ????.threadPriority(Thread.NORM_PRIORITY?-?2)??
  • ????.denyCacheImageMultipleSizesInMemory()??
  • ????.memoryCache(new?UsingFreqLimitedMemoryCache(2?*?1024?*?1024))?//?You?can?pass?your?own?memory?cache?implementation/你能夠通過自己的內(nèi)存緩存實現(xiàn)??
  • ????.memoryCacheSize(2?*?1024?*?1024)????
  • ????.discCacheSize(50?*?1024?*?1024)????
  • ????.discCacheFileNameGenerator(new?Md5FileNameGenerator())//將保存的時候的URI名稱用MD5?加密??
  • ????.tasksProcessingOrder(QueueProcessingType.LIFO)??
  • ????.discCacheFileCount(100)?//緩存的文件數(shù)量??
  • ????.discCache(new?UnlimitedDiscCache(cacheDir))//自己定義緩存路徑??
  • ????.defaultDisplayImageOptions(DisplayImageOptions.createSimple())??
  • ????.imageDownloader(new?BaseImageDownloader(context,?5?*?1000,?30?*?1000))?//?connectTimeout?(5?s),?readTimeout?(30?s)超時時間??
  • ????.writeDebugLogs()?//?Remove?for?release?app??
  • ????.build();//開始構(gòu)建??
  • ????//?Initialize?ImageLoader?with?configuration.??
  • 以上的配置看個人需求進行選擇,不是全部都要進行配置。


    配置好ImageLoaderConfiguration后。調(diào)用以下方法來實現(xiàn)初始化:

    [java]?view plaincopy
  • ImageLoader.getInstance().init(config);//全局初始化此配置??
  • 注:ImageLoaderConfiguration 配置中的.discCacheFileNameGenerator()方法是將緩存下來的文件以什么方式命名

    ? ? ? ? ? 里面能夠調(diào)用的方法有 ?1.new Md5FileNameGenerator() //使用MD5對UIL進行加密命名

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.new?HashCodeFileNameGenerator()//使用HASHCODE對UIL進行加密命名

    二.

    ? ? ? ? 使用ImageLoader進行圖片載入的時候,先要實例化ImageLoader,調(diào)用以下方法進行實例化。在每一個布局里面都要實例化后再使用。

    [java]?view plaincopy
  • protected?ImageLoader?imageLoader?=?ImageLoader.getInstance();??
  • 之后進行顯示的圖片的各種格式DisplayImageOptions?的設(shè)置:

    [java]?view plaincopy
  • DisplayImageOptions?options;??
  • options?=?new?DisplayImageOptions.Builder()??
  • ?.showImageOnLoading(R.drawable.ic_launcher)?//設(shè)置圖片在下載期間顯示的圖片??
  • ?.showImageForEmptyUri(R.drawable.ic_launcher)//設(shè)置圖片Uri為空或是錯誤的時候顯示的圖片??
  • .showImageOnFail(R.drawable.ic_launcher)??//設(shè)置圖片載入/解碼過程中錯誤時候顯示的圖片
  • .cacheInMemory(true)//設(shè)置下載的圖片是否緩存在內(nèi)存中??
  • .cacheOnDisc(true)//設(shè)置下載的圖片是否緩存在SD卡中??
  • .considerExifParams(true) ?//是否考慮JPEG圖像EXIF參數(shù)(旋轉(zhuǎn),翻轉(zhuǎn))
  • .imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//設(shè)置圖片以怎樣的編碼方式顯示??
  • .bitmapConfig(Bitmap.Config.RGB_565)//設(shè)置圖片的解碼類型//??
  • .decodingOptions(android.graphics.BitmapFactory.Options?decodingOptions)//設(shè)置圖片的解碼配置??
  • //.delayBeforeLoading(int?delayInMillis)//int?delayInMillis為你設(shè)置的下載前的延遲時間
  • //設(shè)置圖片增加緩存前,對bitmap進行設(shè)置??
  • //.preProcessor(BitmapProcessor?preProcessor)??
  • .resetViewBeforeLoading(true)//設(shè)置圖片在下載前是否重置,復位??
  • .displayer(new?RoundedBitmapDisplayer(20))//是否設(shè)置為圓角,弧度為多少??
  • .displayer(new?FadeInBitmapDisplayer(100))//是否圖片載入好后漸入的動畫時間??
  • .build();//構(gòu)建完畢??
  • 依照你所須要的配置去設(shè)置,假設(shè)不須要的就能夠不做配置。



    注:

    ? 以上配置中的:

    ?1.imageScaleType(ImageScaleType?imageScaleType)??是設(shè)置?圖片的縮放方式
    ?????縮放類型mageScaleType:

    ? ? ? ? ? ? ? EXACTLY?:圖像將全然按比例縮小的目標大小

    ? ? ? ? ? ? ? EXACTLY_STRETCHED:圖片會縮放到目標大小全然

    ? ? ? ? ? ? ? IN_SAMPLE_INT:圖像將被二次採樣的整數(shù)倍

    ? ? ? ? ? ? ? IN_SAMPLE_POWER_OF_2:圖片將降低2倍。直到下一降低步驟,使圖像更小的目標大小

    ? ? ? ? ? ? ? NONE:圖片不會調(diào)整
    ??2).displayer(BitmapDisplayer?displayer)???是設(shè)置?圖片的顯示方式

    ??????顯示方式displayer

    ??????????????RoundedBitmapDisplayerint?roundPixels)設(shè)置圓角圖片

    ??????????????FakeBitmapDisplayer()這個類什么都沒做

    ??????????????FadeInBitmapDisplayerint?durationMillis)設(shè)置圖片漸顯的時間

           ??SimpleBitmapDisplayer()正常顯示一張圖片 
     


    之后依照需求調(diào)用

    1.純粹為了載入默認配置的一個圖片的

    ? 方法:

    ? public?void?displayImage(String?uri,?ImageView?imageView)?{}

    ? 詳細實現(xiàn):

    [java]?view plaincopy
  • ImageLoader.getInstance().displayImage(imageUrl,?imageView);?//?imageUrl代表圖片的URL地址,imageView代表承載圖片的IMAGEVIEW控件??
  • 2.載入自己定義配置的一個圖片的

    ? 方法:

    ? public?void?displayImage(String?uri,?ImageView?imageView,?DisplayImageOptions?options)?{}

    ? 詳細實現(xiàn):

    [java]?view plaincopy
  • ImageLoader.getInstance().displayImage(imageUrl,?imageView,options);?//?imageUrl代表圖片的URL地址,imageView代表承載圖片的IMAGEVIEW控件?。?options代表DisplayImageOptions配置文件??

  • 3.圖片載入時候帶載入情況的監(jiān)聽

    ? 方法:

    ?public?void?displayImage(String?uri,?ImageAware?imageAware,?DisplayImageOptions?options,ImageLoadingListener?listener)?{}

    ? ImageLoadingListener?用于監(jiān)聽圖片的下載情況。

    ? 詳細實現(xiàn):

    [java]?view plaincopy
  • imageLoader.displayImage(imageUrl,?imageView,?options,?new?ImageLoadingListener()?{??
  • ????@Override??
  • ????public?void?onLoadingStarted()?{??
  • ???????//開始載入的時候運行??
  • ????}??
  • ????@Override??
  • ????public?void?onLoadingFailed(FailReason?failReason)?{????????
  • ???????//載入失敗的時候運行??
  • ????}???
  • ????@Override???
  • ????public?void?onLoadingComplete(Bitmap?loadedImage)?{??
  • ???????//載入成功的時候運行??
  • ????}???
  • ????@Override???
  • ????public?void?onLoadingCancelled()?{??
  • ???????//載入取消的時候運行??
  • ??
  • ????}});??

  • 4.圖片載入時候。帶監(jiān)聽又帶載入進度條的情況
    ? ?調(diào)用:
    public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
    ? ? ? ? ? ? ? ? ? ? ImageLoadingListener listener, ImageLoadingProgressListener progressListener) {}
    ? ?詳細實現(xiàn):

    [java]?view plaincopy
  • imageLoader.displayImage(imageUrl,?imageView,?options,?new?ImageLoadingListener()?{??
  • ????@Override??
  • ????public?void?onLoadingStarted()?{??
  • ???????//開始載入的時候運行??
  • ????}??
  • ????@Override??
  • ????public?void?onLoadingFailed(FailReason?failReason)?{????????
  • ???????//載入失敗的時候運行??
  • ????}??????
  • ????@Override??????
  • ????public?void?onLoadingComplete(Bitmap?loadedImage)?{??
  • ???????//載入成功的時候運行??
  • ????}??????
  • ????@Override??????
  • ????public?void?onLoadingCancelled()?{??
  • ???????//載入取消的時候運行??
  • ????},new?ImageLoadingProgressListener()?{????????
  • ??????@Override??
  • ??????public?void?onProgressUpdate(String?imageUri,?View?view,?int?current,int?total)?{?????
  • ??????//在這里更新?ProgressBar的進度信息??
  • ??????}??
  • ????});??

  • 四、注意事項
    ? 1.上述提到的2個權(quán)限必須增加,否則會出錯
    ? 2.ImageLoaderConfiguration必須配置而且全局化的初始化這個配置ImageLoader.getInstance().init(config); ?否則也會出現(xiàn)錯誤提示
    ? 3.ImageLoader是依據(jù)ImageView的height,width確定圖片的寬高。
    ? 4.假設(shè)經(jīng)常出現(xiàn)OOM(別人那邊看到的。認為非常有提的必要)
    ? ?①降低配置之中線程池的大小,(.threadPoolSize).推薦1-5;
    ? ?②使用.bitmapConfig(Bitmap.config.RGB_565)取代ARGB_8888;
    ? ?③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 ? ? ? ?try.imageScaleType(ImageScaleType.EXACTLY);
    ? ?④避免使用RoundedBitmapDisplayer.他會創(chuàng)建新的ARGB_8888格式的Bitmap對象;
    ? ?⑤使用.memoryCache(new WeakMemoryCache())。不要使用.cacheInMemory();

    以下有人問到怎樣載入本地圖片什么的。之后把那位親的回答補充上來,謝謝各位大大提出的不足(那時候用的時候僅僅想到用網(wǎng)絡(luò)圖片了,所以也沒考慮這么多)。

  • String?imageUri?=?"http://site.com/image.png";?//?from?Web??
  • String?imageUri?=?"file:///mnt/sdcard/image.png";?//?from?SD?card??
  • String?imageUri?=?"content://media/external/audio/albumart/13";?//?from?content?provider??
  • String?imageUri?=?"assets://image.png";?//?from?assets??
  • String?imageUri?=?"drawable://"?+?R.drawable.image;?//?from?drawables?(only?images,?non-9patch) ?


  • ? ? 大致就講到這里。可能有的地方不足歡迎提出。希望大家能夠更加easy入手、使用這個庫。


    ==========================================================================================

    歡迎增加我們的技術(shù)交流群:
    Android群:?66756039
    JavaEE群: ?361579846?


    轉(zhuǎn)載于:https://www.cnblogs.com/yutingliuyl/p/6920742.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

    以上是生活随笔為你收集整理的Android-Universal-Image-Loader 的使用说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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