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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...