Fresco、Picasso、Glide常用圖片加載框架的封裝

最近在整理項(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è)置即可

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,377評(píng)論 25 708
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,245評(píng)論 4 61
  • 顧小軸閱讀 153評(píng)論 0 0
  • 晚飯時(shí)分,小舅突然提議說(shuō)去獵樹崗爬山。我一口答應(yīng):“好呀好呀,把哥哥姐姐也都喊上。”已過(guò)元宵,接連幾天的晴...
    i小森閱讀 388評(píng)論 1 1
  • 我曾聽見最惡毒的話莫過(guò)于,貧困生就應(yīng)該有貧困生的樣子。很想當(dāng)他面問一下,貧困生是什么樣子,是只能穿得破爛?不能有...
    赱籽閱讀 466評(píng)論 0 4