<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android圖片緩存之初識Glide

      前言:

           前面總結學習了圖片的使用以及Lru算法,今天來學習一下比較優秀的圖片緩存開源框架。技術本身就要不斷的更迭,從最初的自己使用SoftReference實現自己的圖片緩存,到后來做電商項目自己的實現方案不能滿足項目的需求改用Afinal,由于Afinal不再維護而選擇了師出同門的Xutils,中間也接觸過別的開源框架比如Picasso,對Picasso的第一次印象就不太好,初次接觸是拿到了公司剛從外包公司接手過來的圖片社交類app,對內存占用太大,直接感受就是導致ListView滑動有那么一點卡頓,老牌的圖片緩存框架universalImageLoader聽說過一直沒有真正使用過,之前項目都很小,差不多幾百萬級別的app,一直使用的都是Xutils,最近覺得項目大起來了,萬一Xutils不維護了或者說要求支持的圖片格式多起來的時候,可能Xutils就不是最佳選擇了,這也是來學習Gilde的根本動機吧。其實本來想著去學習Facebook的Fresco圖片框架,但是簡單的看了一下,需要連同自定義控件一起使用,功能雖然強大,但是對于已經在維護的項目修改成本那可不是一般的高,以后有興趣在學習吧!

       圖片緩存相關博客地址:

      Glide簡介:

              Glide 是 Google 員工的開源項目, Google I/O 上被推薦使用,一個高效、開源、Android設備上的媒體管理框架,它遵循BSD、MIT以及Apache 2.0協議發布。Glide具有獲取、解碼和展示視頻劇照、圖片、動畫等功能,它還有靈活的API,這些API使開發者能夠將Glide應用在幾乎任何網絡協議棧里。創建Glide的主要目的有兩個,一個是實現平滑的圖片列表滾動效果,另一個是支持遠程圖片的獲取、大小調整和展示。

       gitHub地址:https://github.com/bumptech/glide

      Glide特點

      •  使用簡單
      • 可配置度高,自適應程度高
      • 支持常見圖片格式 Jpg png gif webp
      • 支持多種數據源  網絡、本地、資源、Assets 等
      • 高效緩存策略    支持Memory和Disk圖片緩存 默認Bitmap格式采用RGB_565內存使用至少減少一半
      • 生命周期集成   根據Activity/Fragment生命周期自動管理請求
      • 高效處理Bitmap  使用Bitmap Pool使Bitmap復用,主動調用recycle回收需要回收的Bitmap,減小系統回收壓力

      Glide簡單使用

      1.)添加引用 build.gradle 中添加配置

        compile 'com.github.bumptech.glide:glide:3.7.0'

      2.)設置綁定生命周期

      我們可以更加高效的使用Glide提供的方式進行綁定,這樣可以更好的讓加載圖片的請求的生命周期動態管理起來

        Glide.with(Context context);// 綁定Context
        Glide.with(Activity activity);// 綁定Activity
        Glide.with(FragmentActivity activity);// 綁定FragmentActivity
        Glide.with(Fragment fragment);// 綁定Fragment

       

      3. )簡單的加載圖片實例

       Glide.with(this).load(imageUrl).into(imageView);

      4.)設置加載中以及加載失敗圖片

      api里面對placeholder()、error()函數中有多態實現 用的時候可以具體的熟悉一下

      Glide.with(this).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);

      5.)設置跳過內存緩存

       Glide.with(this).load(imageUrl).skipMemoryCache(true).into(imageView);

      6.)設置下載優先級

      Glide.with(this).load(imageUrl).priority(Priority.NORMAL).into(imageView);

      7.)設置緩存策略

      Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);

      策略解說:

      all:緩存源資源和轉換后的資源

      none:不作任何磁盤緩存

      source:緩存源資源

      result:緩存轉換后的資源

      8.)設置加載動畫

      api也提供了幾個常用的動畫:比如crossFade()

        Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
      R.anim.item_alpha_in
      <?xml version="1.0" encoding="utf-8"?>
      <set xmlns:android="http://schemas.android.com/apk/res/android">
          <alpha
              android:duration="500"
              android:fromAlpha="0.0"
              android:toAlpha="1.0"/>
      </set>

      9.)設置縮略圖支持

      這樣會先加載縮略圖 然后在加載全圖

       Glide.with(this).load(imageUrl).thumbnail(0.1f).into(imageView);

      10.)設置加載尺寸

       Glide.with(this).load(imageUrl).override(800, 800).into(imageView);

      11.)設置動態轉換

       Glide.with(this).load(imageUrl).centerCrop().into(imageView);

          api提供了比如:centerCrop()、fitCenter()等函數也可以通過自定義Transformation,舉例說明:比如一個人圓角轉化器

       public class GlideRoundTransform extends BitmapTransformation {
              private float radius = 0f;
              public GlideRoundTransform(Context context) {
                  this(context, 4);
              }
      
              public GlideRoundTransform(Context context, int dp) {
                  super(context);
                  this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
              }
      
              @Override
              protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
                  return roundCrop(pool, toTransform);
              }
      
              private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
                  if (source == null) return null;
      
                  Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
                  if (result == null) {
                      result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
                  }
                  Canvas canvas = new Canvas(result);
                  Paint paint = new Paint();
                  paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
                  paint.setAntiAlias(true);
                  RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
                  canvas.drawRoundRect(rectF, radius, radius, paint);
                  return result;
              }
      
              @Override
              public String getId() {
                  return getClass().getName() + Math.round(radius);
              }
          }

       

      具體使用

      Glide.with(this).load(imageUrl).transform(new GlideRoundTransform(this)).into(imageView);

      12.)設置要加載的內容

      項目中有很多需要先下載圖片然后再做一些合成的功能,比如項目中出現的圖文混排,該如何實現目標下

              Glide.with(this).load(imageUrl).centerCrop().into(new SimpleTarget<GlideDrawable>() {
                  @Override
                  public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
                      imageView.setImageDrawable(resource);
                  }
              });

      13 .)設置監聽請求接口

        Glide.with(this).load(imageUrl).listener(new RequestListener<String, GlideDrawable>() {
                  @Override
                  public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                      return false;
                  }
      
                  @Override
                  public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                      //imageView.setImageDrawable(resource);
                      return false;
                  }
              }).into(imageView);

       

      設置監聽的用處 可以用于監控請求發生錯誤來源,以及圖片來源 是內存還是磁盤

      15.)設置動態GIF加載方式

       Glide.with(this).load(imageUrl).asBitmap().into(imageView);//顯示gif靜態圖片
       Glide.with(this).load(imageUrl).asGif().into(imageView);//顯示gif動態圖片

       16.)緩存的動態清理

       Glide.get(this).clearDiskCache();//清理磁盤緩存 需要在子線程中執行
       Glide.get(this).clearMemory();//清理內存緩存  可以在UI主線程中進行

       

      小結:

         以上是Glide的常規用法,基本上滿足開發需要了,然后再去學習一下其他相關知識。

       

      posted on 2016-06-04 09:27  總李寫代碼  閱讀(72983)  評論(3)    收藏  舉報

      主站蜘蛛池模板: 亚洲一区二区| 中国老熟妇自拍hd发布| 精品综合久久久久久97| 国产精品人妻在线观看 | 国内自拍第一区二区三区| 精品人妻系列无码人妻免费视频| 亚洲第一狼人成人综合网| 无码精品人妻一区二区三区中| 成人亚欧欧美激情在线观看| 日本一区不卡高清更新二区| 五月综合激情婷婷六月| 中文字幕日韩国产精品| 狠狠躁夜夜躁人人爽天天5| 国产欧美丝袜在线二区| 久久久久无码精品国产h动漫| 成人又黄又爽又色的视频 | 中文字幕在线精品人妻| av高清无码 在线播放| 久久这里只有精品免费首页| 亚洲高清国产自产拍av| 偷拍精品一区二区三区| 黑人大荫道bbwbbb高潮潮喷| 无码人妻一区二区三区精品视频| 又爽又黄又无遮掩的免费视频| 久久精品国产亚洲av久| 国产老女人精品免费视频| av新版天堂在线观看| 久久国产国内精品国语对白| 国产91小视频在线观看| 国产成人亚洲综合图区| 2021国产精品一卡2卡三卡4卡| 亚洲人成电影在线播放| 国产精品污双胞胎在线观看| 国产极品粉嫩尤物一线天| 国产网友愉拍精品视频手机 | 成年美女黄网站色大片免费看| 石嘴山市| 377p日本欧洲亚洲大胆张筱雨| 99热成人精品热久久66| 亚洲中文字幕日产无码成人片| 亚洲一品道一区二区三区|