關(guān)于Fresco的優(yōu)點(diǎn)大家自行谷歌吧,它太強(qiáng)大太優(yōu)秀了,我這一片小博文容納不下啊photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn),今天主要給大家簡單介紹下Fresco的使用以及一些屬性的介紹。

 Fresco是一個(gè)強(qiáng)大的圖片加載組件。使用它之后,你不需要再去關(guān)心圖片的加載和顯示這些繁瑣的事情!支持Android2.3及以后的版本。

本文為原創(chuàng)博文,轉(zhuǎn)載請(qǐng)注明原文鏈接:http://www.cnblogs.com/panhouye/p/6278116.html

 官網(wǎng)詳細(xì)介紹了Fresco一些特性,我第一次看確實(shí)是驚呆了。https://www.fresco-cn.org/

2016年Fresco的最新的源碼分析:https://github.com/desmond1121/Fresco-Source-Analysis

簡述與其他常用圖片緩存框架的比較

(1)Volley提供了一個(gè)新的控件NetworkImageView來代替?zhèn)鹘y(tǒng)的ImageView如果你的工程項(xiàng)目,是一個(gè)比較小的項(xiàng)目,或者要求不是很高的項(xiàng)目,處理比較簡單的可以使用這個(gè)庫,這個(gè)庫是Google 2013 I/O發(fā)布的一個(gè)開源庫。使用這個(gè)庫在圖片的處理上,沒有提供任何的圖片處理的操作,用于細(xì)粒度的數(shù)據(jù)連接還是可以的。

(2)Universal-Image-Loader是比較早的一個(gè)圖片緩存組件,也一直受到開發(fā)者的推崇,在很多老的應(yīng)用中使用。

(3)Picasso與Glide,無疑Glide勝出

(4)而Fresco作為新秀,不管從內(nèi)存管理(三級(jí)緩存),圖片的漸進(jìn)式呈現(xiàn),Gif圖和Webp格式圖像的加載,都是非常突出。(也是我最喜歡用的)

涉及的常用基本屬性介紹

(1)layout_width和layout_height不支持warp_Content但是可以通過setAspectRetio();來設(shè)置寬高比

(2)fadeDuration()淡出時(shí)間;

(3)actualImageScaleType 設(shè)置圖片縮放,通常使用foucsCrop,該屬性值會(huì)通過算法把人頭像放在中間

(4)placeholderImage下載成功之前顯示的圖片placeholderImageScaleType

(5)failureImage加載失敗時(shí)顯示的圖片faiturelmagescateType

(6)retrylmage加載失敗,提示用戶點(diǎn)擊重新加載的圖片retrylmagescateType

(7)progressBarImage提示用戶正在加載,和進(jìn)度無關(guān)progressBarlmagescateType

(8)progressBarAutoRotateInterval圖片自動(dòng)旋轉(zhuǎn)的時(shí)間間隔

(9)backgroundImage背景

(10)overlayImage疊加圖

(11)pressedStateOverlayImage按下時(shí)候的疊加圖

(12)roundAsCircle是否涉及圓圈

(13)roundedCornerRadius圓角

(14)roundTopLeft、roundTopRight…..分別設(shè)置4個(gè)角不同半徑,設(shè)置為true以后可以在代碼中通過RoundingParams的setConnersRadii()方法設(shè)置角度。

(15)roundWithOverlayColor邊框的疊加顏色

(16)roundingBorderWidth邊框?qū)挾?/p>

(17)roundingBorderColor邊框顏色

下面我們簡單演示使用Fresco加載網(wǎng)絡(luò)圖片的流程:

演示效果如下(你們猜對(duì)了,又是本人的玉照photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)):

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

第一步:導(dǎo)依賴包

與之前的android-image-indicator-master項(xiàng)目相同,本次依然使用AndroidStudio2.2。仍然采用在build.gradle下中dependencies下直接添加如下代碼:

1 compile 'com.facebook.fresco:fresco:0.12.0'

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

同時(shí)可以根據(jù)個(gè)人項(xiàng)目需求添加如下依賴:

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

 1 dependencies {  2     // 在 API < 14 上的機(jī)器支持 WebP 時(shí),需要添加  3     compile 'com.facebook.fresco:animated-base-support:0.12.0'  4     // 支持 GIF 動(dòng)圖,需要添加  5     compile 'com.facebook.fresco:animated-gif:0.12.0'  6     // 支持 WebP (靜態(tài)圖+動(dòng)圖),需要添加  7     compile 'com.facebook.fresco:animated-webp:0.12.0'  8     compile 'com.facebook.fresco:webpsupport:0.12.0'  9     // 僅支持 WebP 靜態(tài)圖,需要添加 10     compile 'com.facebook.fresco:webpsupport:0.12.0' 11 }

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

第二步:添加網(wǎng)絡(luò)權(quán)限

因?yàn)槭羌虞d網(wǎng)絡(luò)圖片所以必須在 AndroidManifest.xml配置文件中添加網(wǎng)絡(luò)權(quán)限:

1 <uses-permission android:name="android.permission.INTERNET"/>

第三步:初始化Fresco類

在加載圖片之前,你必須初始化Fresco類。你只需要調(diào)用Fresco.initialize一次即可完成初始化,下面分別介紹在MainActivity與Application中調(diào)用初始化方法

(1)在Application調(diào)用初始化(建議使用

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

1 [MyApplication.java] 2 public class MyApplication extends Application { 3     @Override 4     public void onCreate() { 5         super.onCreate(); 6         Fresco.initialize(this); 7     } 8 }

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

做完上面的工作后,需要在 AndroidManifest.xml 中指定 Application 類。

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

(2)在MainActivity中調(diào)用初始化

需要注意的是要在setContentView之前初始化

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

 1 package com.mly.panhouye.frescodemo;  2 import android.os.Bundle;  3 import android.support.v7.app.AppCompatActivity;  4 import com.facebook.drawee.backends.pipeline.Fresco;  5 public class MainActivity extends AppCompatActivity {  6     @Override  7     protected void onCreate(Bundle savedInstanceState) {  8         super.onCreate(savedInstanceState);  9         Fresco.initialize(this);//需要在setContentView之前初始化 10         setContentView(R.layout.activity_main); 11     } 12 }

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

第四步:layout中的xml布局文件

在布局之前需要在xml文件中加入命名空間

1 xmlns:fresco="http://schemas.android.com/apk/res-auto"

實(shí)現(xiàn)演示效果中的圓形圖片以及邊框線只需要加一下三行代碼(屬性作用請(qǐng)看文章前面的介紹):

1 fresco:roundAsCircle="true" 2  fresco:roundingBorderWidth="3dp" 3  fresco:roundingBorderColor="@color/colorAccent"

具體布局文件如下,本次演示通過按鈕點(diǎn)擊出發(fā)圖片加載,使用SimpleDraweeView(注意:layout_width/height不支持wrap_content):

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

 1 <?xml version="1.0" encoding="utf-8"?>  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     xmlns:tools="http://schemas.android.com/tools"  4     xmlns:fresco="http://schemas.android.com/apk/res-auto"  5     android:id="@+id/activity_main"  6     android:layout_width="match_parent"  7     android:layout_height="match_parent"  8     tools:context="com.mly.panhouye.frescodemo.MainActivity">  9     <Button 10         android:layout_width="wrap_content" 11         android:layout_height="wrap_content" 12         android:layout_below="@+id/my_image_view" 13         android:layout_centerHorizontal="true" 14         android:text="加載網(wǎng)絡(luò)圖片" 15         android:onClick="loadInternetImage" 16         android:layout_marginTop="12dp" 17         android:id="@+id/button" /> 18     <com.facebook.drawee.view.SimpleDraweeView 19         android:id="@+id/my_image_view" 20         android:layout_width="400dp" 21         android:layout_height="400dp" 22         fresco:placeholderImage="@mipmap/ic_launcher" 23         android:layout_alignParentTop="true" 24         android:layout_centerHorizontal="true" /> 25 </RelativeLayout>

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

第五步:java實(shí)現(xiàn)代碼

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

 1 package com.mly.panhouye.frescodemo;  2 import android.net.Uri;  3 import android.os.Bundle;  4 import android.support.v7.app.AppCompatActivity;  5 import android.view.View;  6 import com.facebook.drawee.backends.pipeline.Fresco;  7 import com.facebook.drawee.view.SimpleDraweeView;  8 public class MainActivity extends AppCompatActivity {  9     @Override 10     protected void onCreate(Bundle savedInstanceState) { 11         super.onCreate(savedInstanceState); 12         Fresco.initialize(this);//需要在setContentView之前初始化 13         setContentView(R.layout.activity_main); 14     } 15     //點(diǎn)擊事件加載網(wǎng)絡(luò)圖片代碼 16     public void loadInternetImage(View view){ 17         Uri uri = Uri.parse("http://r.photo.store.qq.com/psb?/V12kkHqD1CWRD4/MeykWt0NXu0stiBFzf378D7ajKSDet6k1.Vaqmq2vps!/r/dKMAAAAAAAAA"); 18         SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view); 19         draweeView.setImageURI(uri); 20     } 21 }

photoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)

剩下的,F(xiàn)resco會(huì)替你完成,比如:顯示占位圖直到加載完成;下載圖片;緩存圖片;圖片不再顯示時(shí),從內(nèi)存中移除等等等等。

看了本文可以結(jié)合我之前的頭像設(shè)置博文《Android中通過訪問本地相冊(cè)或者相機(jī)設(shè)置用戶頭像》搞一點(diǎn)事情啦,大家試試吧。

 本文僅僅介紹了Fresco最基本的使用方法,大家伙可以訪問官網(wǎng)來嘗試其他功能實(shí)現(xiàn)。