Android常用的圖片載入庫

来源:http://www.cnblogs.com/xxdh/archive/2017/04/05/6668585.html
-Advertisement-
Play Games

圖片載入涉及到圖片的緩存、圖片的處理、圖片的顯示等。四種常用的圖片載入框架,分別是Fresco、ImageLoader、 Picasso、 Glide... ...


 Android常用的圖片載入庫

 

前言:圖片載入涉及到圖片的緩存、圖片的處理、圖片的顯示等。四種常用的圖片載入框架,分別是Fresco、ImageLoader、 Picasso、 Glide。

 

Universal Image Loader:ImageLoader是比較老的框架,一個強大的圖片載入庫,包含各種各樣的配置,最老牌,使用也最廣泛。

  ImageLoader開源庫存哪些特征:

 

    1.多線程下載圖片,圖片可以來源於網路,文件系統,項目文件夾assets中以及drawable中等

    2.支持隨意的配置ImageLoader,例如線程池,圖片下載器,記憶體緩存策略,硬碟緩存策略,圖片顯示選項以及其他的一些配置

    3.支持圖片的記憶體緩存,文件系統緩存或者SD卡緩存

    4.支持圖片下載過程的監聽

    5.根據控制項(ImageView)的大小對Bitmap進行裁剪,減少Bitmap占用過多的記憶體

    6.較好的控製圖片的載入過程,例如暫停圖片載入,重新開始載入圖片,一般使用在ListView,GridView中,滑動過程中暫停加載入圖片,停止滑動的時候去載入圖片

    7.提供在較慢的網路下對圖片進行載入

 

Glide:Google推薦的圖片載入庫,專註於流暢的滾動。

  Glide開源庫特征:


    1.支持 Gif、WebP、縮略圖。甚至是 Video,所以更該當做一個媒體緩存。

    2.支持優先順序處理。

    3.記憶體友好,圖片預設使用預設 RGB_565 而不是 ARGB_888,雖然清晰度差些,但圖片更小,也可配置到 ARGB_888等...

 

Picasso:Picasso是Square公司出品的一款非常優秀的開源圖片載入庫,是目前Android開發中超級流行的圖片載入庫之一,和OkHttp搭配起來更配呦!

     詳情使用.

 

Fresco:Facebook出的,天生驕傲!不是一般的強大。

     詳情使用.

 

效果(具體見源碼):

 

開發環境:AndroidStudio2.2.1+gradle-2.14.1

 

引入依賴:

 //適配器
    compile 'com.classic.adapter:commonadapter:1.2'
    //註解式開發
    compile 'com.jakewharton:butterknife:7.0.1'

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

    compile 'com.github.bumptech.glide:glide:3.6.1'

    compile 'com.squareup.picasso:picasso:2.5.2'

 

涉及知識:

  1.註解式開發+(Commonadapter)萬能適配器使用

  2.圖片載入庫:ImageLoader、Glide、Picasso

  3.WebView+SwipeRefreshLayout實現載入和刷新網頁

 

部分代碼(Gilde使用):

public class GildeActivity extends BaseActivity {

    /**
     * Glide的主要目的有兩個:
     * 1.一個是實現平滑的圖片列表滾動效果,
     * 2.另一個是支持遠程圖片的獲取、大小調整和展示
     * 3.支持Gif 動畫和視頻劇照解碼、智能的暫停和重新開始請求、支持縮略圖

     * http://www.open-open.com/lib/view/open1440397324450.html
     */

    @Bind(R.id.img)
    ImageView img;

    @Bind(R.id.listview)
    ListView listView;


    private String imgurl = "http://avatar.csdn.net/4/A/A/1_zhh_csdn_ard.jpg";

    @Override
    protected int setContentView() {
        return R.layout.gilde_img_layout;
    }

    @Override
    protected void initLayout() {
        GlideAdapter adapter = new GlideAdapter(this, R.layout.listview_img_item, AppConfig.resultImgData());
        listView.setAdapter(adapter);
    }

    @OnClick({R.id.btn0, R.id.btn1, R.id.btn2})
    void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn0:
                test0();
                break;
            case R.id.btn1:
                test1();
                break;
            case R.id.btn2:
                // 必須在UI線程中調用
                Glide.get(GildeActivity.this).clearMemory();
                break;

        }

    }

    //基礎glide網路圖片載入
//      Glide的with方法不光接受Context,還接受Activity 和 Fragment,Context會自動的從他們獲取

    //    圖片的縮放,centerCrop()和fitCenter():
    //使用centerCrop是利用圖片圖填充ImageView設置的大小,如果ImageView的
    private void test0() {
        Glide.with(this)
                .load(imgurl)//路徑支持png,jpg,gif,mp4
                .placeholder(R.mipmap.ic_launcher) // 預載入圖片
                .error(R.mipmap.ic_launcher)//載入圖片失敗
                .crossFade()//淡入淡出動畫效果
                .centerCrop()
                .into(img);

    }

    //gif顯示
    private void test1() {
        Glide.with(this)
                .load("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&
              sec=1491037864865&di=cc8f78a7e5c1d359839cec3463123b47&imgtype=0&
              src=http%3A%2F%2Fi.zeze.com%2Fattachment%2Fforum%2F201501%2F29%2F181236dyjtsu2qinms5qjz.jpg") .asGif() //判斷載入的url資源是否為gif格式的資源 .placeholder(R.mipmap.ic_launcher) // 預載入圖片 .error(R.mipmap.ic_launcher)//載入圖片失敗 .into(img); // .into(new GlideDrawableImageViewTarget(img, 1));//如果要控制Gif 顯示次數,可以使用 } // 顯示本地視頻 private void test2() { String filePath = "/storage/emulated/0/Pictures/example_video.mp4"; Glide .with(this) .load(Uri.fromFile(new File(filePath))) .into(img); } //緩存 private void test3() { Glide .with(this) .load(imgurl) .skipMemoryCache(true) //跳過記憶體緩存 .into(img); } //緩存 private void test4() { Glide .with(this) .load(imgurl) .diskCacheStrategy(DiskCacheStrategy.NONE) //跳過硬碟緩存 .into(img); } /** * DiskCacheStrategy.NONE 什麼都不緩存 * DiskCacheStrategy.SOURCE 僅僅只緩存原來的全解析度的圖像 * DiskCacheStrategy.RESULT 僅僅緩存最終的圖像,即降低解析度後的(或者是轉換後的) * DiskCacheStrategy.ALL 緩存所有版本的圖像(預設行為) */ // 使用Glide 顯示圓形圖片 private void test5() { Glide.with(this).load(imgurl).asBitmap().centerCrop().into(new BitmapImageViewTarget(img) { @Override protected void setResource(Bitmap resource) { RoundedBitmapDrawable circularBitmapDrawable = RoundedBitmapDrawableFactory.create(GildeActivity.this.getResources(), resource); circularBitmapDrawable.setCircular(true); img.setImageDrawable(circularBitmapDrawable); } }); } }

 

源碼下載...

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.改變菊花的顏色 // hud.color = [UIColor blackColor]; > hud.bezelView.color =[UIColor blackColor]; 2.改變菊花的坐標 // hud.yOffset=-150; > hud.offset = CGPointMake( ...
  • Xamarin+Prism開發中去PCL類庫,以及導入.net standard類庫的兩種方法介紹與對比。 ...
  • 前言 筆者因為項目需要自定義相機,所以瞭解了一下 Android 關於 camera 這塊的 API。Android SDK 21(LOLLIPOP) 開始已經棄用了之前的 Camera 類,提供了 camera2 相關 API,目前網上關於 camera2 API 介紹的資料比較少,筆者搜集網上資 ...
  • 此篇為針對Objective-c語言入門的基礎知識,為了能讓大家更清楚的理解,此整理中編寫了許多的代碼案例和部分截圖,如有錯誤之處,望指正,願與您相互交流學習,共同進步! "會飛的猴子_阿新" (同時還要向刀哥致敬) 本篇目標是: 理解記憶體五大區域及各自的職責 目錄結構 00.簡述 01. 分配和釋 ...
  • 在和sever後臺交互的過程中、有時候、他們需要我們iOS開發者以“application/json”形式上傳。 ...
  • Paint 畫筆 ,即用來繪製圖形的"筆" 前面我們知道了Paint的一些基本用法: 不過我們會發現,這樣畫出的線條都是筆筆直直的,能滿足需求,但是美觀上並不好看。 這就需要使用到Paint類 更多的一些方法了 首先,看下最簡單設置的線條 一、線條路徑樣式 設置路徑樣式;取值類型是所有派生自Path ...
  • 安裝 Android Development Environment http://www.cnblogs.com/youchihwang/p/6645880.html 2. answer : no 3. Installing Repo 4. ARM Compiler Tools 5.01 upda ...
  • 由OpenDigg 出品的安卓開源項目周報第十五期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開源項目,方便安卓開發人員便捷的找到自己需要的項目工具。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...