Android使用開(kāi)源框架Fresco處理圖片
關(guān)于Fresco的優(yōu)點(diǎn)大家自行谷歌吧,它太強(qiáng)大太優(yōu)秀了,我這一片小博文容納不下啊羨慕,今天主要給大家簡(jiǎn)單介紹下Fresco的使用以及一些屬性的介紹。
Fresco是一個(gè)強(qiáng)大的圖片加載組件。使用它之后,你不需要再去關(guān)心圖片的加載和顯示這些繁瑣的事情!支持Android2.3及以后的版本。
官網(wǎng)詳細(xì)介紹了Fresco一些特性,我第一次看確實(shí)是驚呆了。https://www.fresco-cn.org/
2016年Fresco的最新的源碼分析:https://github.com/desmond1121/Fresco-Source-Analysis
簡(jiǎn)述與其他常用圖片緩存框架的比較
(1)Volley提供了一個(gè)新的控件NetworkImageView來(lái)代替?zhèn)鹘y(tǒng)的ImageView如果你的工程項(xiàng)目,是一個(gè)比較小的項(xiàng)目,或者要求不是很高的項(xiàng)目,處理比較簡(jiǎn)單的可以使用這個(gè)庫(kù),這個(gè)庫(kù)是Google 2013 I/O發(fā)布的一個(gè)開(kāi)源庫(kù)。使用這個(gè)庫(kù)在圖片的處理上,沒(méi)有提供任何的圖片處理的操作,用于細(xì)粒度的數(shù)據(jù)連接還是可以的。
(2)Universal-Image-Loader是比較早的一個(gè)圖片緩存組件,也一直受到開(kāi)發(fā)者的推崇,在很多老的應(yīng)用中使用。
(3)Picasso與Glide,無(wú)疑Glide勝出
(4)而Fresco作為新秀,不管從內(nèi)存管理(三級(jí)緩存),圖片的漸進(jìn)式呈現(xiàn),Gif圖和Webp格式圖像的加載,都是非常突出。(也是我最喜歡用的)
涉及的常用基本屬性介紹
(1)layout_width和layout_height不支持warp_Content但是可以通過(guò)setAspectRetio();來(lái)設(shè)置寬高比
(2)fadeDuration()淡出時(shí)間;
(3)actualImageScaleType 設(shè)置圖片縮放,通常使用foucsCrop,該屬性值會(huì)通過(guò)算法把人頭像放在中間
(4)placeholderImage下載成功之前顯示的圖片placeholderImageScaleType
(5)failureImage加載失敗時(shí)顯示的圖片faiturelmagescateType
(6)retrylmage加載失敗,提示用戶點(diǎn)擊重新加載的圖片retrylmagescateType
(7)progressBarImage提示用戶正在加載,和進(jìn)度無(wú)關(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以后可以在代碼中通過(guò)RoundingParams的setConnersRadii()方法設(shè)置角度。
(15)roundWithOverlayColor邊框的疊加顏色
(16)roundingBorderWidth邊框?qū)挾?/p>
(17)roundingBorderColor邊框顏色
下面我們簡(jiǎn)單演示使用Fresco加載網(wǎng)絡(luò)圖片的流程:
演示效果如下(你們猜對(duì)了,又是本人的玉照安靜):

第一步:導(dǎo)依賴包
與之前的android-image-indicator-master項(xiàng)目相同,本次依然使用AndroidStudio2.2。仍然采用在build.gradle下中dependencies下直接添加如下代碼:
compile 'com.facebook.fresco:fresco:0.12.0'

同時(shí)可以根據(jù)個(gè)人項(xiàng)目需求添加如下依賴:
dependencies {
// 在 API < 14 上的機(jī)器支持 WebP 時(shí),需要添加
compile 'com.facebook.fresco:animated-base-support:0.12.0'
// 支持 GIF 動(dòng)圖,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
// 支持 WebP (靜態(tài)圖+動(dòng)圖),需要添加
compile 'com.facebook.fresco:animated-webp:0.12.0'
compile 'com.facebook.fresco:webpsupport:0.12.0'
// 僅支持 WebP 靜態(tài)圖,需要添加
compile 'com.facebook.fresco:webpsupport:0.12.0'
}
第二步:添加網(wǎng)絡(luò)權(quán)限
因?yàn)槭羌虞d網(wǎng)絡(luò)圖片所以必須在 AndroidManifest.xml配置文件中添加網(wǎng)絡(luò)權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>
第三步:初始化Fresco類
在加載圖片之前,你必須初始化Fresco類。你只需要調(diào)用Fresco.initialize一次即可完成初始化,下面分別介紹在MainActivity與Application中調(diào)用初始化方法
(1)在Application調(diào)用初始化(建議使用)
[MyApplication.java]
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
做完上面的工作后,需要在 AndroidManifest.xml 中指定 Application 類。

(2)在MainActivity中調(diào)用初始化
需要注意的是要在setContentView之前初始化
package com.mly.panhouye.frescodemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.facebook.drawee.backends.pipeline.Fresco;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);//需要在setContentView之前初始化
setContentView(R.layout.activity_main);
}
}
第四步:layout中的xml布局文件
在布局之前需要在xml文件中加入命名空間
xmlns:fresco="http://schemas.android.com/apk/res-auto"
具體布局文件如下,本次演示通過(guò)按鈕點(diǎn)擊出發(fā)圖片加載,使用SimpleDraweeView(注意:layout_width/height不支持wrap_content):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.mly.panhouye.frescodemo.MainActivity">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/my_image_view"
android:layout_centerHorizontal="true"
android:text="加載網(wǎng)絡(luò)圖片"
android:onClick="loadInternetImage"
android:layout_marginTop="12dp"
android:id="@+id/button" />
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="400dp"
android:layout_height="400dp"
fresco:placeholderImage="@mipmap/ic_launcher"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
第五步:java實(shí)現(xiàn)代碼
package com.mly.panhouye.frescodemo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.view.SimpleDraweeView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fresco.initialize(this);//需要在setContentView之前初始化
setContentView(R.layout.activity_main);
}
//點(diǎn)擊事件加載網(wǎng)絡(luò)圖片代碼
public void loadInternetImage(View view){
Uri uri = Uri.parse("http://r.photo.store.qq.com/psb?/V12kkHqD1CWRD4/MeykWt0NXu0stiBFzf378D7ajKSDet6k1.Vaqmq2vps!/r/dKMAAAAAAAAA");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);
}
}
剩下的,F(xiàn)resco會(huì)替你完成,比如:顯示占位圖直到加載完成;下載圖片;緩存圖片;圖片不再顯示時(shí),從內(nèi)存中移除等等等等。
本文僅僅介紹了Fresco最基本的使用方法,大家伙可以訪問(wèn)官網(wǎng)來(lái)嘗試其他功能實(shí)現(xiàn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android編程之SharedPreferences文件存儲(chǔ)操作實(shí)例分析
這篇文章主要介紹了Android編程之SharedPreferences文件存儲(chǔ)操作方法,實(shí)例分析了SharedPreferences文件操作的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
Android自定義view之利用drawArc方法實(shí)現(xiàn)動(dòng)態(tài)效果(思路詳解)
這篇文章主要介紹了Android自定義view之利用drawArc方法實(shí)現(xiàn)動(dòng)態(tài)效果,drawArc方法包含了五個(gè)參數(shù),具體細(xì)節(jié)在本文中給大家提到過(guò),需要的朋友可以參考下2021-08-08
Android自定義組件獲取本地圖片和相機(jī)拍照?qǐng)D片
這篇文章主要為大家詳細(xì)介紹了Android自定義組件獲取本地圖片和相機(jī)拍照?qǐng)D片的相關(guān)資料,非常炫酷的效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android ViewPager實(shí)現(xiàn)無(wú)限循環(huán)輪播廣告位Banner效果
這篇文章主要為大家詳細(xì)介紹了Android ViewPager實(shí)現(xiàn)無(wú)限循環(huán)輪播廣告位Banner效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
android仿360加速球?qū)崿F(xiàn)內(nèi)存釋放
本篇文章實(shí)現(xiàn)了Android仿360加速球?qū)崿F(xiàn)內(nèi)存釋放,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10
Android UI設(shè)計(jì)與開(kāi)發(fā)之ViewPager仿微信引導(dǎo)界面以及動(dòng)畫(huà)效果
這篇文章主要為大家詳細(xì)介紹了Android UI設(shè)計(jì)與開(kāi)發(fā)之ViewPager仿微信引導(dǎo)界面以及動(dòng)畫(huà)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
Android Studio創(chuàng)建AIDL文件并實(shí)現(xiàn)進(jìn)程間通訊實(shí)例
本篇文章主要介紹了Android Studio創(chuàng)建AIDL文件并實(shí)現(xiàn)進(jìn)程間通訊實(shí)例,具有一定的參考價(jià)值,有興趣可以了解一下。2017-04-04
Android開(kāi)發(fā)實(shí)現(xiàn)的幾何圖形工具類GeometryUtil完整實(shí)例
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)的幾何圖形工具類GeometryUtil,涉及Android坐標(biāo)圖形數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2017-11-11

