最近在整理項(xiàng)目中用到的圖片框架,因?yàn)楹芏嗟脑颍?xiàng)目從2014年開始的1.0版本迭代到現(xiàn)在,經(jīng)歷了無(wú)數(shù)個(gè)版本與功能,圖片加載框架也從UIL(Universal-Image-Loader)切換到fresco。眾所周知,freco是需要繼承DraweeView才能顯示圖片,而ImageLoader是采用系統(tǒng)的ImageView顯示,如果要把ImageLoader替換成freco的工作量可想而知。
正所謂吃一塹長(zhǎng)一智,有了這次替換的教訓(xùn),反映出了我們項(xiàng)目架構(gòu)上的不足,使用第三方框架時(shí)必須要封裝好方便日后替換與維護(hù),避免過(guò)多的入侵項(xiàng)目?jī)?nèi)的代碼。
封裝目標(biāo)
1.簡(jiǎn)單易用,使用越簡(jiǎn)單越好
2.易擴(kuò)展易替換,支持主流的圖片處理框架fresco、picasso、glide等快速替換
實(shí)現(xiàn)
一、fresco需要繼承DraweeView才能顯示圖片,所以我們要新建一個(gè)繼承DraweeView的ImageDraweeView
public class ImageDraweeView extends SimpleDraweeView{
public ImageDraweeView(Context context, GenericDraweeHierarchy hierarchy) {
super(context, hierarchy);
}
public ImageDraweeView(Context context) {
super(context);
setBackgroundColor(Color.TRANSPARENT);
}
public ImageDraweeView(Context context, AttributeSet attrs) {
super(context, attrs);
setBackgroundColor(Color.TRANSPARENT);
}
public ImageDraweeView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setBackgroundColor(Color.TRANSPARENT);
}
}
二、一些參數(shù)設(shè)置
1.設(shè)置加載中圖片
private int mDefaultPic;
/**
* 設(shè)置加載中顯示圖片
* @param defaultPic
* @return
*/
public ImageDraweeView withPlaceholderImage(int defaultPic) {
this.mDefaultPic = defaultPic;
return this;
}
2.顯示圖片
/**
* 顯示圖片
*
* @param url
*/
public void displayImage(String url) {
//fresco
GenericDraweeHierarchy hierarchy = getHierarchy();
if (mDefaultPic != 0) {
hierarchy.setPlaceholderImage(mDefaultPic);
}
setImageURI(url);
//glide
RequestManager requestManager = Glide.with(getContext());
if (mDefaultPic != 0) {
RequestOptions requestOptions = new RequestOptions();
requestOptions.placeholder(mDefaultPic);
requestManager
.applyDefaultRequestOptions(requestOptions);
}
requestManager
.load(url)
.into(this);
//picasso
RequestCreator requestCreator = Picasso.with(getContext()).load(url);
if (mDefaultPic != 0) {
requestCreator.placeholder(mDefaultPic);
}
requestCreator.into(this);
}
還有其他比如圓角圖片等就不一一列舉了,和加載中圖片一樣的方法設(shè)置即可