Fresco

1. Fresco 是什麼

首先,Fresco 是一款開源的圖片加載組件,也是目前最強大的圖片加載組件。

其次,Fresco 中設計有一個叫做 image pipeline 的模塊。它負責從網絡,從本地文件系統,本地資源加載圖片。 爲了最大限度節省空間和CPU時間,它含有3級緩存設計(2級內存,1級文件)。

另外,還有一個特別的地方,Fresco 中設計有一個叫做 Drawees 模塊, 方便地顯示 loading 圖,當圖片不再顯示在屏幕上時,及時地釋放內存和空間佔用。

同時,Fresco 支持 Android 2.3(API level 9)及其以上版本。


2. Fresco 的獨特之處

Fresco 作爲衆多開源圖片加載組件之一,可以受到廣大開發者的喜愛,自然有着它的獨特之處。

2.1 內存管理

一個沒有未壓縮的圖片,即 Android 中的 Bitmap,佔用大量的內存。大的內存佔用勢必引發更加頻繁的GC。 在5.0以下,GC 將會顯著地引發界面卡頓。

在5.0以下系統,Fresco 將圖片放到一個特別的內存區域,也就是 Ashmem (系統匿名共享內存)。當然,在圖片不顯示的時候,佔用的內存會自動被釋放。 這會使得 APP 更加流暢,減少因圖片內存佔用而引發的 OOM。

2.2 漸進式呈現圖片

Fresco 加載圖片時,可以實現漸進式呈現圖片,漸進式的 JPEG 圖片格式已經流行數年了,漸進式圖片格式先呈現大致的圖片輪廓,然後隨着圖片下載的繼續, 呈現逐漸清晰的圖片,這對於移動設備,尤其是慢網絡有極大的利好,可帶來更好的用戶體驗。

2.3 支持Gif圖和WebP格式

作爲加載組件,Fresco 不僅支持簡單的 JPG、PNG 格式的圖片加載,還同時支持 Gif 和 WebP 格式的圖片加載,非常強大。

2.4 圖像的呈現方式

Fresco 的圖像呈現方式也很特別,可以自定義居中焦點(對人臉等圖片顯示非常有幫助),支持圓角圖,當然圓圈也行,並且下載失敗之後,點擊可以重新下載,特別是可以自定義佔位圖,自定義 overlay, 或者進度條,同時可以指定用戶按壓時的 overlay。

2.5 圖像的加載

圖像的加載時很重要的一部分,Fresco 可以爲同一個圖片指定不同的遠程路徑,或者使用已經存在本地緩存中的圖片,加載時先顯示一個低解析度的圖片,等高清圖下載完之後再顯示高清圖,等到加載完成時回調通知,並且對於本地圖,如有 EXIF 縮略圖,在大圖加載完成之前,可先顯示縮略圖。至於縮放或者旋轉圖片和處理已下載的圖片,Fresco 都是可以做到的。


3. Fresco 的基本使用

前面已經對 Fresco 做了非常詳細的介紹了,對於 Fresco 一定很感興趣吧,下面就開始使用它吧。

3.1 添加 Gradle 依賴

在使用 Fresco 之前,一定要記得先使用 Gradle 添加對 Fresco 的依賴,代碼如下。、

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:25.0.1'
    compile 'com.facebook.fresco:fresco:0.12.0'
}
3.2 添加權限

加載網絡圖片時,需要一定的網絡權限,所以必須添加網絡權限。

<uses-permission android:name="android.permission.INTERNET"/>
3.3 初始化 Fresco

在加載圖片之前,你必須初始化 Fresco 類。你只需要調用 Fresco.initialize() 一次即可完成初始化,在 Application 裏面做這件事再適合不過了(如下面的代碼),注意多次的調用初始化是無意義的。

public class CniaoApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this,config);
    }
}

下面就是需要在 AndroidManifest.xml 中指定相應的 Application 類。

<application
        android:name=".CniaoApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
     .......
</application>
3.4 添加 SimpleDraweeView

首先,在 xml 佈局文件 Layout 中, 加入命名空間。

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
   ......
</LinearLayout>

然後在佈局中加入 SimpleDraweeView。

<com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/image_view"
        android:layout_width="500dp"
        android:layout_height="300dp"
        fresco:placeholderImage="@drawable/default_loading"
/>
3.5 加載圖片

在 Activity/Fragment 中寫入圖片加載即可。

public class MainActivity extends AppCompatActivity {
    private  String img_url="http://img4q.duitang.com/uploads/item/201411/20/20141120132318_3eAuc.thumb.700_0.jpeg";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Uri uri = Uri.parse(img_url);
        SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.image_view);
        draweeView.setImageURI(uri);
     }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章