【Android - 框架】之Fresco的使用

當下有不少圖片加載框架,常見的有Glide、Fresco、Picasso等。Glide由於其體積小、緩存機制強大等優勢,受到了廣大程序員的青睞;Fresco雖然體積比較大,緩存機制也沒有Glide強大,但它勝在擁有一些炫酷的效果(進度條、淡入效果)等,也有不少人在使用。今天咱們就來介紹一下Fresco的使用。html

        先貼出【Fresco的中文官方文檔】android

 

一、配置環境

        使用Fresco須要先在build.gradle中導入依賴:程序員

複製代碼
    // Fresco所需依賴 compile 'com.facebook.fresco:fresco:0.12.0' // 在 API < 14 上的機器支持 WebP 時,須要添加 compile 'com.facebook.fresco:animated-base-support:0.12.0' // 支持 GIF 動圖,須要添加 compile 'com.facebook.fresco:animated-gif:0.12.0' // 支持 WebP (靜態圖+動圖),須要添加 compile 'com.facebook.fresco:animated-webp:0.12.0' compile 'com.facebook.fresco:webpsupport:0.12.0'
複製代碼

 

        若是須要從網絡中下載圖片,則須要在AndroidManifest.xml文件中配置網絡權限:web

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

 

        最後,在項目的Application中初始化Fresco:緩存

複製代碼
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); // 初始化Fresco Fresco.initialize(this); } }
複製代碼

 

        別忘了在AndroidManifest.xml文件中爲Application添加name屬性:網絡

    <application android:name=".MyApplication" ...... </application>

 

二、SimpleDraweeView

2.一、XML屬性

        Fresco爲咱們提供了一個SimpleDraweeView控件,咱們能夠直接在這個控件中加載圖片。Fresco在這個控件中集成了不少屬性,簡單實用。如下是SimpleDraweeView中的經常使用屬性:app

複製代碼
        fresco:actualImageScaleType:實際加載的圖片的伸縮樣式
        fresco:backgroundImage:底層圖片資源
        fresco:fadeDuration:進度條和佔位符圖片逐漸消失、加載的圖片逐漸顯示的時間間隔
        fresco:failureImage:加載失敗時顯示的圖片資源
        fresco:failureImageScaleType:加載失敗時加載的圖片的伸縮樣式
        fresco:overlayImage:在顯示的圖片表層覆蓋一張圖片的圖片資源
        fresco:placeholderImage:佔位符圖片資源
        fresco:placeholderImageScaleType:佔位符圖片的伸縮樣式
        fresco:progressBarAutoRotateInterval:進度條圖片轉動週期
        fresco:progressBarImage:進度條圖片資源
        fresco:progressBarImageScaleType:進度條圖片的伸縮樣式
        fresco:retryImage:提示從新加載的圖片資源
        fresco:retryImageScaleType:提示從新加載的圖片的伸縮樣式
        fresco:roundAsCircle:將圖片剪切成圓形
        fresco:viewAspectRatio:圖片寬高比
複製代碼

 

        咱們的XML佈局文件中的代碼以下:框架

複製代碼
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/id_main_sdv_sdv" android:layout_width="match_parent" android:layout_height="wrap_content" fresco:actualImageScaleType="focusCrop" fresco:fadeDuration="3000" fresco:failureImage="@mipmap/ic_launcher" fresco:failureImageScaleType="centerInside" fresco:placeholderImage="@mipmap/ic_launcher" fresco:placeholderImageScaleType="fitCenter" fresco:progressBarAutoRotateInterval="1000" fresco:progressBarImage="@mipmap/ic_launcher" fresco:progressBarImageScaleType="centerInside" fresco:retryImage="@mipmap/ic_launcher" fresco:retryImageScaleType="centerCrop" fresco:roundAsCircle="false" fresco:viewAspectRatio="1.6" /> <Button android:id="@+id/id_main_btn_load" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_margin="20.0dip" android:text="Start Load Image" /> </RelativeLayout>
複製代碼

 

2.二、注意事項

(1)SimpleDraweeView控件的寬高不能設置爲wrap_content,只能是match_parent、具體值或使用viewAspectRatio屬性設置寬高比。ide

(2)若是在一個頁面中加載多張圖片,不要將SimpleDraweeView直接放在ScollView中,建議使用RecyclerView、ListView或GridView,由於ScrollView中的SimpleDraweeView會持有內存直到Activity或Fragment銷燬。佈局

(3)使用SimpleDraweeView時,不要使用imageView中有、View中沒有的屬性。

三、框架使用

3.一、簡單使用

        像TextView、Button等其餘控件同樣後去到SimpleDraweeView,而後調用以下代碼便可加載網絡圖片:

SimpleDraweeView sdv = (SimpleDraweeView) findViewById(R.id.id_main_sdv_sdv);
sdv.setImageURI("http://image5.tuku.cn/pic/wallpaper/fengjing/menghuandaziranmeijingbizhi/009.jpg");

 

3.二、JAVA代碼設置屬性

        咱們能夠經過GenericDraweeHierarchy,在JAVA代碼中動態的設置SimpleDraweeView控件的屬性。須要注意的是,若是在JAVA代碼中設置了屬性,那麼XML文件中設置的屬性就都無效了。一個實例代碼以下:

複製代碼
        // 代碼設置SimpleDraweeView的屬性(會覆蓋XML設置的全部屬性,即在XML中有在這裏沒有的屬性都會失效) // 注意:一個GenericDraweeHierarchy是不能被多個SimpleDraweeView共用的 GenericDraweeHierarchy hierarchy = new GenericDraweeHierarchyBuilder(getResources()) .setFadeDuration(3000) .setPlaceholderImage(R.mipmap.ic_launcher) .setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_XY) .setProgressBarImage(new ProgressBarDrawable()) // 顯示進度條(Fresco自帶的進度條)  .build(); // 設置圖片圓角 RoundingParams roundingParams = new RoundingParams(); roundingParams.setRoundAsCircle(false); // 不將圖片剪切成圓形 roundingParams.setCornersRadius(200); hierarchy.setRoundingParams(roundingParams); // 爲SimpleDraweeView設置屬性 sdv.setHierarchy(hierarchy);
複製代碼

 

        注意:不能把同一個GenericDraweeHierarchy對象設置給多個SimpleDraweeView!

 

3.三、設置下載事件

複製代碼
        sdv.setController(Fresco.newDraweeControllerBuilder()
                .setControllerListener(new BaseControllerListener<ImageInfo>() { @Override public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) { // 全部圖片都加載成功時觸發的方法 int width = imageInfo.getWidth(); int height = imageInfo.getHeight(); QualityInfo qualityInfo = imageInfo.getQualityInfo(); int quality = qualityInfo.getQuality(); boolean isOfFullQuality = qualityInfo.isOfFullQuality(); boolean isOfGoodEnoughQuality = qualityInfo.isOfGoodEnoughQuality(); } @Override public void onIntermediateImageSet(String id, ImageInfo imageInfo) { // 加載漸進式圖片時回調的方法  } @Override public void onFailure(String id, Throwable throwable) { // 加載圖片失敗時回調的方法  } }) .setUri("http://image5.tuku.cn/pic/wallpaper/fengjing/menghuandaziranmeijingbizhi/009.jpg") .build());
複製代碼

 

3.四、漸進式圖片

        漸進式圖片是一種支持圖片從模糊到清晰的加載模式。代碼以下:

複製代碼
                sdv.setController(Fresco.newDraweeControllerBuilder()
                        .setImageRequest(
                                ImageRequestBuilder.newBuilderWithSource(
                                        Uri.parse("http://image5.tuku.cn/pic/wallpaper/fengjing/menghuandaziranmeijingbizhi/009.jpg")) .setProgressiveRenderingEnabled(true) .build()) .setOldController(sdv.getController()) .build());
複製代碼

 

以上就是對Fresco的基本使用方法的介紹,但願對你們有幫助~~~

相關文章
相關標籤/搜索