1. 程式人生 > >Fresco用法總結基礎篇

Fresco用法總結基礎篇

Fresco是Facebook最新推出的一款用於Android應用中展示圖片的強大圖片庫,可以從網路、本地儲存和本地資源中載入圖片。相對於ImageLoader,擁有更快的圖片下載速度以及可以載入和顯示gif圖等諸多優勢,是個很好的圖片框架。PS:畢竟是facebook開源的,我說差也不會有人相信,還是誇誇吧!大笑

首先體驗其最基本的用法:

1.匯入 Android Studio 或者 Gradle

dependencies {
  compile 'com.facebook.fresco:fresco:0.9.0+'
}

2、在xml中引入SimpleDraweeView
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:placeholderImage="@drawable/my_drawable"
  />
注意:1、在SimpleDraweeView的父控制元件或者根節點中配置xmlns:fresco="http://schemas.android.com/apk/res-auto";

2、配置網路許可權

3、在Java程式碼中開始載入圖片
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

OK,到這兒已經初步學會了該框架的使用。

接下來詳細研究其用法:

URIs的使用:

型別 Scheme 示例
遠端圖片 http://, https:// HttpURLConnection 或者參考 使用其他網路載入方案
本地檔案 file:// FileInputStream
Content provider content:// ContentResolver
asset目錄下的資源 asset:// AssetManager
res目錄下的資源 res:// Resources.openRawResource

res 示例:Uri uri = Uri.parse("res://包名(實際可以是任何字串甚至留空)/" + R.drawable.ic_launcher);

注意:Fresco 不支援 相對路徑的URI. 所有的URI都必須是絕對路徑,並且帶上該URI的scheme。

在XML中使用SimpleDraweeView:

給出一個完整的示例:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="20dp"
    fresco:fadeDuration="300"//漸進時間
    fresco:actualImageScaleType="focusCrop"
    fresco:placeholderImage="@color/wait_color"
    fresco:placeholderImageScaleType="fitCenter"
    fresco:failureImage="@drawable/error"//失敗時顯示的圖片
    fresco:failureImageScaleType="centerInside"//失敗圖片的顯示方式
    fresco:retryImage="@drawable/retrying"//重試圖
    fresco:retryImageScaleType="centerCrop"//重試圖顯示方式
    fresco:progressBarImage="@drawable/progress_bar"
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    fresco:backgroundImage="@color/blue"
    fresco:overlayImage="@drawable/watermark"
    fresco:pressedStateOverlayImage="@color/red"
    fresco:roundAsCircle="false"
    fresco:roundedCornerRadius="1dp"
    fresco:roundTopLeft="true"
    fresco:roundTopRight="false"
    fresco:roundBottomLeft="false"
    fresco:roundBottomRight="true"
    fresco:roundWithOverlayColor="@color/corner_color"
    fresco:roundingBorderWidth="2dp"
    fresco:roundingBorderColor="@color/border_color"
  />
說明:必須宣告 android:layout_width 和 android:layout_height,否則將無法正確載入影象,另外不支援 wrap_content 屬性,但也有例外的時候,如果想固定控制元件的寬高比,則可以使用wrap_content,並通過在xml程式碼中設定fresco:viewAspectRatio="小數"或者在Java程式碼中設定mSimpleDraweeView.setAspectRatio(1.33f);即可。

在Java中自定義顯示圖

一般情況下,在XML設定顯示效果即可, 如果想更多定製化,可以這樣:

建立一個 builder 然後設定給 SimpleDraweeView:

List<Drawable> backgroundsList;
List<Drawable> overlaysList;
GenericDraweeHierarchyBuilder builder =
    new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy hierarchy = builder
    .setFadeDuration(300)
    .setPlaceholderImage(new MyCustomDrawable())
    .setBackgrounds(backgroundList)
    .setOverlays(overlaysList)
    .build();
mSimpleDraweeView.setHierarchy(hierarchy);
注意:請不要多次呼叫setHierarchy,即使這個View是可回收的。建立 DraweeHierarchy 的較為耗時的一個過程,應該多次利用。

修改 DraweeHierarchy

DraweeHierarchy 的一些屬性可以在執行時改變。

要改變這些屬性,首先獲取一個引用:

GenericDraweeHierarchy hierarchy = mSimpleDraweeView.getHierarchy();

修改佔位圖

修改佔位圖為資源id:hierarchy.setPlaceholderImage(R.drawable.placeholderId);

或者修改為一個 Drawable:Drawable drawable; hierarchy.setPlaceholderImage(drawable);

改變影象的顯示

修改縮放型別:

hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);

如果你選擇縮放型別為 focusCrop,需要指定一個居中點:hierarchy.setActualImageFocusPoint(point);

你可以為影象新增一個 color filter:

ColorFilter filter;

// 建立filter

hierarchy.setActualImageColorFilter(filter);

圓角

除了圓角顯示方式(原來為圓角的不能修改為圓圈,反之亦然),其他圓角相關的呈現引數, 具體參見這裡 是可以動態修改的。

如下: 獲取DraweeHierarchy的圓角顯示引數,修改圓角半徑為10。

RoundingParams roundingParams = hierarchy.getRoundingParams();

roundingParams.setCornersRadius(10);

hierarchy.setRoundingParams(roundingParams);

OK,到此就已經掌握了Fresco的基礎用法,接一下的一篇會研究Fresco的一些高階功能及技巧。

相關推薦

Fresco用法總結基礎

Fresco是Facebook最新推出的一款用於Android應用中展示圖片的強大圖片庫,可以從網路、本地儲存和本地資源中載入圖片。相對於ImageLoader,擁有更快的圖片下載速度以及可以載入和顯示gif圖等諸多優勢,是個很好的圖片框架。PS:畢竟是facebook開源

【備戰春招/秋招系列】美團面經總結基礎 (附詳解答案)

該文已加入開源文件:JavaGuide(一份涵蓋大部分Java程式設計師所需要掌握的核心知識)。地址:github.com/Snailclimb/…. 【強烈推薦!非廣告!】阿里雲雙11褥羊毛活動:m.aliyun.com/act/team111… 差不多一折,不過僅限阿里雲新人購買,不是新人的朋

Python學習總結-基礎

正在學習python中,收集整理下學習筆記,以供參考。本篇主要為基礎語法。 一、基礎知識 1、資料型別和變數 python是動態語言,不像java的靜態語言那樣先宣告變數的資料型別才能使用,直接對變數賦值即可 2、字元編碼 統一用utf-8即可變長的Unicode 其中

git在工作中的用法總結-使用

上一篇介紹了git的環境安裝配置,本篇對git在工作中常用的用法進行總結,已滿足大部分的日常工作需求,對於其他的一些git命令用法在今後使用到時我也會更新上來,文中如有錯誤,歡迎大家指出來,謝謝~ 一、git本地基礎用法 1、建立程式碼倉庫 git init 2、加入所有目錄到倉庫 git a

RF新手常見問題總結--(基礎)

1. 經常有人問這個元素找不到,一般先排除這兩個地方,再自己找找 A:是否等待了足夠的時間讓元素載入 (增加sleep xx, wait Until xxx) B:  仔細查查,這個元素是否進入到另一個frame了 (select frame xxx) 上面兩點都確定了還不行

SQL Server 入門學習總結---基礎

首先相信很多人在開始準備學習的時候,肯定對資料庫的基本學習路線是蒙的,當然我也是這樣過來的。我也是在後來把基礎知識學完之後,才看到一張圖,很棒的學習路線圖。先把這個分享給大家: 對於這張圖,相信不用

2017年5月iOS招人心得答案總結(基礎)

技術 最近正在準備換份工作, 看到網上有份題庫, 覺得不錯, 準備整理下, 複習下所學知識, 為面試做足準備, 下面是我整理了一上午的題庫答案, 希望能幫大家溫習下知識; 當然如果同為找工作的朋友, 也希望你能找到份誠心的工作;之後的答案已附下方, 謝謝大家(

面試準備&總結-Java基礎

logs 服務器 運行 錯誤 筆記 table code 其他 pro   在vps的服務器到期了,在hw又不能訪問,直接在博客園寫筆記了。 基礎篇 1. 集合類的繼承關系,源碼實現原理,初始大小和如何增長。 - list類初始大小10,加載因子為1,擴容到1.5+1。

基礎之集合(一)(List)總結

intern ansi [] 集合 add 引用 public log ++ 1. List集合下常用的集合(ArrayList,LinkedList,Vector);   JVM垃圾回收GC,Java中采取了可達性分析法,標記所有從根節點開始的可達對象,未被標記的對象就

基礎之集合(二)總結

線程不安全 emp abstract 和集 write next 不可變 叠代器 關系 1. Map集合和collection結合的區別 1》Collection一次存一個元素;Map一次存一對元素; 2》Collection是單列集合;Map是雙列集合; 3》Map中的存

java集合基礎 簡單總結

log 轉型 first exceptio set lin 一個隊列 left 刪除 昨天晚上看了編程思想4的持有對象,所以把學到看到的一些記記背背的方面給總結一下。 java的容器主要分為兩類,一個是實現了接口Collection的一類,還有一個是

Linux基礎--linux基礎和幫助用法

ring 解決方法 變化 功能 信息 給定 兩種 linux基礎 linux 內核 Linux基礎篇--linux基礎和幫助用法 本章概要 用戶登錄 終端 Shell介紹 執行命令 簡單命令 Tab鍵補全 命令行歷史 bash快捷鍵 使

JAVA常用集合框架用法詳解基礎一之Colletion介面

首先,在學習集合之前我們能夠使用的可以儲存多個元素的容器就是陣列。 下面舉幾個例子主要是引出集合類的: 1、8,4,5,6,7,55,7,8  像這樣的型別相同的可以使用陣列來儲存,本例可以用int[] arr來儲存。 2、”zhnagsan”,true,68 像這樣的可以使

JAVA常用集合框架用法詳解基礎三之Colletion子介面Set

這一篇我們來介紹Collection介面的另一個子介面,Set介面。Set是個介面,元素不可以重複,是無序的。Set介面中的方法和Collection的一致。 A、Set的子類: 1、HashSet:此類實現的Set介面,由雜湊表(實際上是一個HashMap)例項支援,它不保證Set的迭代順

JAVA常用集合框架用法詳解基礎二之Colletion子介面List

接著上一篇,接著講講集合的知識。上一篇講了Collection介面。它可以說是集合的祖先了,我們這一篇就說說它的子孫們。 一、Collection的子介面 List:有序(存入和取出的順序一致),元素都有索引(即角標),元素可以重複。 Set:元素不能重複,無序的。 首先講講L

Spring Boot (基礎):Spring Boot知識點總結

Spring Boot簡介 SpringBoot 以便捷開發、快速部署著稱。設計目的是用來簡化新Spring應用的初始搭建以及開發過程。 SpringBoot 致力於簡潔,讓開發者寫更少的配置,程式能夠更快的執行和啟動 SpringBoot 設計原則就是 約定優於配置。並且

python爬蟲-基礎用法總結

     近期在學習爬蟲,前面自己在網上找部落格看,也自己寫了一些簡單的程式碼,感覺知識不夠系統。故從網上找了視訊來學習,下面是對一些基礎知識的總結。 一.urllib庫使用(還是requests庫方便,所以不列舉用法了) 二.requests庫使用(比urll

Unity基礎: UGUI中的Slider,Scrollbar總結與區分。

Slider(滑動條):是一個主要用於形象的拖動以改變目標值的控制元件,他的最恰當應用是用來改變一個數值,最大值和最小值自定義,拖動滑塊可在此之間改變,例如改變聲音大小。 Scrollbar(滾動條):是一個主要用於形象的拖動以改變目標比例的控制元件,他的最恰當應用是用

java基礎06_引用型別用法總結_debug_final_內部類

一、斷點除錯:1.在需要暫停的程式碼的左側行號的位置單擊一下,會顯示一個紅色的圓圈,表示斷點位置。2.點選“Debug執行”–程式碼右鍵–>Debug "main…"3.執行起來後在斷點處會暫停;4.單步除錯:F7(單步執行(一行一行執行),遇到方法呼叫,

git在工作中的用法總結-環境安裝

使用git有很長一段時間了 ,平時用到的時候都是直接google,經常用到的一些也記錄在筆記中,但有時候筆記太多,實在是太亂了(其實是我太懶~ 哈?),找都要半天的時候還不如直接google,今天有空索性將以前的筆記整理一下發在部落格中,便於今後檢視,關於git的使用,這裡我打算分開寫,分為環境安裝篇和