Fresco基礎(chǔ)用法

背景

facebook開源的一個強大的圖片加載組件。使用之后,不需要關(guān)心圖片的加載和顯示這些繁瑣的事情,支持Android2.3以上版本.

依賴

build.gradle 文件添加

//fresco
compile 'com.facebook.fresco:fresco:0.12.0'
// 支持 GIF 動圖,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'

初始化

使用fresco之前必須先初始化,只需要調(diào)用Fresco.initialize一次即可完成初始化,一般在Application中初始化。

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

使用

簡單的使用直接用fresco 的 SimpleDraweeView 即可,其有兩種運用方式,一種直接在xml中配置,一種的java代碼中設(shè)置。

xml的使用

<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"
/>


  • fadeDuration: 動畫持續(xù)時間,默認300ms
  • actualImageScaleType: 要顯示的圖片的scaleType,默認CENTER_CROP
  • placeholderImage: 加載中占位圖
  • setPlaceholderImageScaleType:加載中占位圖scaleType.默認CENTER_INSIDE
  • failureImage:加載失敗的圖片。
  • failureImageScaleType:加載失敗的圖caleType.默認CENTER_INSIDE
  • retryImage:點擊重新加載圖。在加載失敗時,可以設(shè)置點擊重新加載。這時提供一個圖片,加載失敗時,會顯示這個圖片(而不是失敗提示圖片),提示用戶點擊重試。需在在ControllerBuilder 中如下設(shè)置:.setTapToRetryEnabled(true)
  • retryImageScaleType:重新加載圖caleType。
  • progressBarImage:加載進度圖。
  • progressBarImageScaleType:加載進度圖caleType.默認CENTER_INSIDE
  • backgroundImage:設(shè)置背景圖,當(dāng)指定一個背景圖列表的時候,列表中的第一項會被首先繪制,繪制在最下層,然后依次往上繪制。背景圖片不支持縮放類型
  • overlayImage:設(shè)置疊加圖,當(dāng)指定的疊加圖是一個列表的時候,列表第一個元素會被先繪制,最后一個元素最后被繪制到最上層,不支持各種縮放類型
  • pressedStateOverlayImage:設(shè)置按壓狀態(tài)下的疊加圖
  • roundAsCircle:true or false,是否圓圈。
  • roundedCornerRadius:設(shè)置圓角.
  • roundTopLeft: 以下4個角是否開啟圓角。
  • roundTopRight
  • roundBottomLeft:
  • roundBottomRight
  • roundWithOverlayColor:圓角和邊框之間的顏色
  • roundingBorderWidth: 邊框?qū)挾?/li>
  • roundingBorderColor:邊框顏色.

設(shè)置顯示圖片:

mDraweeView.setImageURI(URL);

java代碼設(shè)置

一般情況下,在XML設(shè)置顯示效果即可, 如果想更多定制化,可以創(chuàng)建一個 builder 然后設(shè)置給 DraweeView:

GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
    GenericDraweeHierarchy hierarchy = builder
            .setFadeDuration(300)
            .setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP)
            .setPlaceholderImage(R.drawable.default_avatar)
            .setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
            .setFailureImage(R.drawable.image_error)
            .setFailureImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
            .setRetryImage(R.drawable.fallback_nodata)
            .setRetryImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
            .setPressedStateOverlay(getResources().getDrawable(R.drawable.communication))
            .build();
            
    /**
     * SimpleDraweeView 有兩個方法可以設(shè)置所要加載顯示圖片,簡單的方法就是setImageURI。
     * 如果你需要對加載顯示的圖片做更多的控制和定制,那就需要用到DraweeController
     *
     */
    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setUri(URL)
            .setTapToRetryEnabled(true)
            .setOldController(mDraweeView1.getController())
            .setControllerListener(listener)
            .build();


    mDraweeView1.setHierarchy(hierarchy);
    mDraweeView1.setController(controller);
    

設(shè)置點擊重新加載圖 .setTapToRetryEnabled(true)

圖片下載監(jiān)聽事件

private ControllerListener listener = new BaseControllerListener<ImageInfo>(){
    @Override
    public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {

        if (imageInfo == null) {
            return;
        }
        QualityInfo qualityInfo = imageInfo.getQualityInfo();
        LogHelper.d("Final image received! " +
                        "Size %d x %d" + imageInfo.getWidth()+" "+imageInfo.getHeight()+
                "Quality level %d "+qualityInfo.getQuality()+" good enough: %s "+qualityInfo.isOfGoodEnoughQuality()+ "full quality: %s "+qualityInfo.isOfFullQuality());

    }

    @Override
    public void onIntermediateImageSet(String id, ImageInfo imageInfo) {
        super.onIntermediateImageSet(id, imageInfo);
    }

    @Override
    public void onFailure(String id, Throwable throwable) {
        super.onFailure(id, throwable);
    }
};
  • onFinalImageSet:加載成功后觸發(fā)
  • onFailure :加載失敗后觸發(fā)
  • onIntermediateImageSet: 漸進式JPEG解碼后回調(diào).
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容