背景
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).