真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android圖片加載庫Glide的使用介紹

一:簡介

在泰國舉行的谷歌開發(fā)者論壇上,谷歌為我們介紹了一個名叫 Glide 的圖片加載庫,作者是bumptech。這個庫被廣泛的運(yùn)用在google的開源項目中,包括2014年google I/O大會上發(fā)布的官方app。

赤城網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

 https://github.com/bumptech/glide

二:使用  

1
2
3
dependencies { 
    compile 'com.github.bumptech.glide:glide:3.7.0'

如何查看最新版本

  http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22glide%22 

 

三:使用方法及簡介

     http://mrfu.me/2016/02/27/Glide_Getting_Started/

 

 

四、清除緩存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
    * 清除緩存
    * @param context
    */
   public void clearCache( final Context context ){
       clearMemoryCache( context );
       new Thread(new Runnable() {
           @Override
           public void run() {
               clearDiskCache(  context );
           }
       }).start();
   }
 
   /**
    * 清除內(nèi)存緩存
    * @param context
    */
   public void clearMemoryCache( Context context ){
       Glide.get( context ).clearMemory();
   }
 
   /**
    * 清除磁盤緩存
    * @param context
    */
   public void clearDiskCache( Context context ){
       Glide.get( context ).clearDiskCache();
   }

五、注意事項

    5.1、在使用時需要給app添加聯(lián)網(wǎng)權(quán)限,沒有權(quán)限不會報錯,但是圖片加載不出來,很坑爹?!?/p>

1
2
3
"android.permission.INTERNET" />
"android.permission.READ_EXTERNAL_STORAGE" />
"android.permission.WRITE_EXTERNAL_STORAGE" />

 5.2、加載圖片的方法要寫在 UI 線程中,Glide會做異步處理。

六、使用方法總結(jié)

     6.1 加載網(wǎng)絡(luò)圖片  
1
2
3
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
String url = "http://img5.jpg" ;
Glide.with( this ).load( url ).into( p_w_picpathView ) ; 
6.2 加載網(wǎng)絡(luò)圖片監(jiān)聽(下載完成后顯示)

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package lib.com.myapplication;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
 
public class MainActivity extends AppCompatActivity {
    private ImageView p_w_picpathView ;
    String url = "http://img5.imgtn.bdimg.com/it/u=2941079711,2736454066&fm=11&gp=0.jpg" ;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
        Glide.with( this ).load( url ).asBitmap().into( target ) ;
    }
 
    private SimpleTarget target = new SimpleTarget() {
        @Override
        public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
            //圖片加載完成
            p_w_picpathView.setImageBitmap(bitmap);
        }
    };
}

特別注意 :.asBitmap() 一定要加,否則可能會出錯

     6.3 占位符 placeholder() 方法:在加載開始 -- 加載完成,這段時間顯示的圖片。如果加載失敗,則最終顯示占位符。
1
2
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
Glide.with( this ).load( url ).placeholder( R.drawable.user ).into( p_w_picpathView ) ;
   6.4 占位符 error() 方法:在加載失敗的情況下,顯示的圖片。
1
2
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
Glide.with( this ).load( url ).placeholder( R.drawable.user ).error( R.drawable.default_error ).into( p_w_picpathView ) ;

     在加載開始--> 加載完成(失敗),顯示placeholder()圖片; 如果加載失敗,則顯示error() 里面的圖片。

     6.5 加載 drawable 里面的圖片
1
2
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
Glide.with( this ).load( R.drawable.icon ).asBitmap().into( p_w_picpathView ) ;
     6.6 加載 SD 卡里面的一張圖片 1 load( String string)
1
2
3
4
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
//sd卡上的一張圖片
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp.jpg" ;
Glide.with( this ).load( path ).into( p_w_picpathView ) ;
     6.7 加載 SD 卡里面的一張圖片 2 load( File file )
1
2
3
4
5
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath );
 //sd卡上的一張圖片
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp.jpg" ;
File file = new File( path ) ;
Glide.with( this ).load( file ).into( p_w_picpathView ) ; 
     6.8 加載 SD 卡里面的一張圖片 3  load( Uri  uri )
1
2
3
4
5
//sd卡上的一張圖片
String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/temp.jpg" ;
File file = new File( path ) ;
Uri uri = Uri.fromFile( file ) ;
Glide.with( this ).load( uri ).into( p_w_picpathView ) ;

android 圖片加載庫 Glide 的使用介紹

      6.9   Glide.with() 生命周期控制
  1. with(Context context). 使用Application上下文,Glide請求將不受Activity/Fragment生命周期控制。

  2. with(Activity activity). 使用Activity作為上下文,Glide的請求會受到Activity生命周期控制。

  3. with(FragmentActivity activity).Glide的請求會受到FragmentActivity生命周期控制。

  4. with(android.app.Fragment fragment).Glide的請求會受到Fragment 生命周期控制。

  5. with(android.support.v4.app.Fragment fragment).Glide的請求會受到Fragment生命周期控制。

  • 請求會在onStop的時候自動暫停,

  • 在onStart的時候重新啟動,gif的動畫也會在onStop的時候停止,以免在后臺消耗電量。

   6.10  加載優(yōu)先級設(shè)置     priority()

        枚舉類 Priority 提供了幾種優(yōu)先級等級  ,

      android 圖片加載庫 Glide 的使用介紹

      默認(rèn)的是 : NORMAL

   android 圖片加載庫 Glide 的使用介紹

       實例:

1
2
Glide.with( this).load( url2).priority(Priority.LOW ).into( p_w_picpathView2 ) ;
Glide.with( this).load( url3).priority(Priority.HIGH ).into( p_w_picpathView3 ) ;

   但是這里的優(yōu)先級只是在加載的過程中起一個參考作用, 并不決定真正的加載順序。

   6.10  加載優(yōu)先級設(shè)置     priority()

        枚舉類 Priority 提供了幾種優(yōu)先級等級  ,

      android 圖片加載庫 Glide 的使用介紹

      默認(rèn)的是 : NORMAL

   android 圖片加載庫 Glide 的使用介紹

       實例:

1
2
Glide.with( this).load( url2).priority(Priority.LOW ).into( p_w_picpathView2 ) ;
Glide.with( this).load( url3).priority(Priority.HIGH ).into( p_w_picpathView3 ) ;

   但是這里的優(yōu)先級只是在加載的過程中起一個參考作用, 并不決定真正的加載順序。

 

     6.11 縮略圖的支持      

   (一) 先加載原圖的十分之一作為縮略圖,再加載原圖

1
Glide.with( thi ).load( url ).thumbnail(0.1f).into( p_w_picpathview ) ;

(二)用本地的圖片作為縮略圖,然后再加載原圖

1
2
3
4
DrawableRequestBuilder thumbnailRequest = Glide
                       .with( ThumbnailActivity.this )
                       .load(R.mipmap.ic_launcher);
Glide.with( ThumbnailActivity.this ).load( ur2 ).thumbnail( thumbnailRequest ).into( p_w_picpathView2 ) ;

     6.12 加載 Gif 動圖
1
2
Glide.with( this ).load( url ).into( p_w_picpathView1 ) ;
Glide.with( this ).load( url ).asGif().into( p_w_picpathView2 ) ;

注意:如果把a(bǔ)sGif 換成 asBitmap 則會顯示一張靜態(tài)圖。

 

     6.13 加載本地視頻,相當(dāng)于一張縮略圖
1
2
3
p_w_picpathView = (ImageView) findViewById( R.id.p_w_picpath_video );
String files = Environment.getExternalStorageDirectory().getAbsolutePath() + "/yueyu.mkv" ;
Glide.with( this ).load( files ).into( p_w_picpathView ) ;

(1)只能加載本地視頻,網(wǎng)絡(luò)視頻無法加載。

      (2)加載本地視頻顯示只是視頻的第一幀圖像,相當(dāng)于一張縮略圖。不能播放視頻。

 

     6.14 加載動畫
  • .crossFade()  淡入淡出 , 也是默認(rèn)動畫

  • .crossFade( int duration )  定義淡入淡出的時間間隔

  • .dontAnimate()   不使用任何動畫       

 
    6.15  glide 內(nèi)存緩存

     glide 默認(rèn)啟用內(nèi)存緩存,如果想要禁止內(nèi)存緩存 ,使用 .skipMemoryCache( true )

    

七、自定義 GlideModule

         自定義 GlideModule 的好處:

              1、可以全局的改變 glide 的加載策略

              2、可以自定義磁盤緩存目錄

              3、可以設(shè)置圖片加載的質(zhì)量

       7.1 首先定義一個類實現(xiàn) GlideModule     
1
2
3
4
5
6
7
8
9
10
11
12
public class SimpleGlideModule implements GlideModule {
 
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
 
    }
 
    @Override
    public void registerComponents(Context context, Glide glide) {
 
    }
}

可以看到重寫了兩個方法,applyOptions() , registerComponents() . 兩個方法都沒有返回值 。我們著重于第一個方法,重點(diǎn)研究 GlideBuilder 。

     

     7.2 然后在 AndroidManifest.xml 去申明你寫的 SimpleGlideModule 
1
2
3
    android:name="app.zuil.com.glidedemo.util.SimpleGlideModule"
    android:value="GlideModule" />

name是:包名 + 類名 

 

    7.3 GlideBuilder  
  • .setMemoryCache(MemoryCache memoryCache)

  • .setBitmapPool(BitmapPool bitmapPool)

  • .setDiskCache(DiskCache.Factory diskCacheFactory)

  • .setDiskCacheService(ExecutorService service)

  • .setResizeService(ExecutorService service)

  • .setDecodeFormat(DecodeFormat decodeFormat)

android 圖片加載庫 Glide 的使用介紹

          可以看到 setBitmapPool() 是設(shè)置bitmap池的 ; setDecodeFormat() 是設(shè)置解碼方式的  ;   setDiskCache() 是設(shè)置磁盤緩存的 ; 
     7.4 DecodeFormat  

         Android里有兩個方法去解析圖片:ARGB8888RGB565。第一個為每個像素采用4 byte表示,后面一個則用2 byte表示。ARG8888有更高的圖片質(zhì)量,并且能夠存儲一個alpha通道。Glide默認(rèn)使用低質(zhì)量的RGB565。你可以通過使用Glide module方法改變解析格式。

  android 圖片加載庫 Glide 的使用介紹         
         最后一個完整的自定義glideModule

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class SimpleGlideModule implements GlideModule {
 
    @Override
    public void applyOptions(Context context, GlideBuilder builder) {
        //定義緩存大小為100M
        int  diskCacheSize =  100 * 1024 * 1024;
 
        //自定義緩存 路徑 和 緩存大小
        String diskCachePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/glideCache" ;
 
        //提高圖片質(zhì)量
        builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888);
 
        //自定義磁盤緩存:這種緩存只有自己的app才能訪問到
        // builder.setDiskCache( new InternalCacheDiskCacheFactory( context , diskCacheSize )) ;
        // builder.setDiskCache( new InternalCacheDiskCacheFactory( context , diskCachePath , diskCacheSize  )) ;
 
        //自定義磁盤緩存:這種緩存存在SD卡上,所有的應(yīng)用都可以訪問到
        builder.setDiskCache(new DiskLruCacheFactory( diskCachePath , diskCacheSize ));
 
    }
 
    @Override
    public void registerComponents(Context context, Glide glide) {
 
    }
}

八、緩存管理

       7.1、默認(rèn)緩存目錄和緩存大小

               在Glide源碼中有一個DiskCache接口,里面的Factory類定義了默認(rèn)的磁盤緩存大小為:250 M , 緩存路徑在:p_w_picpath_manager_disk_cache 目錄下

           android 圖片加載庫 Glide 的使用介紹   

           在模擬器上可以查看緩存目錄的位置,有些真機(jī)看不到這個目錄,有可能數(shù)據(jù)庫沒有刷新的原因:

           android 圖片加載庫 Glide 的使用介紹

 

        7.2、緩存模式

      源碼中有枚舉類 DiskCacheStrategy 定義了四種緩存類型

  • DiskCacheStrategy.SOURCE    緩存原圖

  • DiskCacheStrategy.RESULT     緩存和p_w_picpathview大小匹配的圖

  • DiskCacheStrategy.ALL           既緩存原圖,有緩存和p_w_picpathview大小匹配的圖

  • DiskCacheStrategy.NONE        不做任何緩存

      android 圖片加載庫 Glide 的使用介紹

         通過查看源碼我們發(fā)現(xiàn),Glide默認(rèn)緩存策略是: DiskCacheStrategy.RESULT

          android 圖片加載庫 Glide 的使用介紹

         7.3 四種緩存模式對比

               比如:網(wǎng)絡(luò)圖片我們叫做 big1.jpg  寬高:3000 x 2000  大小:2.15 M 。     

1
http://o7rvuansr.bkt.clouddn.com/big1.jpg

             客戶端的 p_w_picpathview 大?。?00 x 300                    

1
2
3
4
   android:id="@+id/p_w_picpath"
   android:layout_width="300dp"
   android:layout_height="300dp" />

               (1) DiskCacheStrategy.SOURCE  : 只會緩存一張圖片,大?。?M   

        Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.SOURCE ).into( p_w_picpathView ) ;

               (2) DiskCacheStrategy.RESULT :  只緩存了一張圖片,大?。?4 KB

        Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.RESULT ).into( p_w_picpathView ) ;

               (3) DiskCacheStrategy.ALL     : 緩存了兩張圖片, 一張大?。? M , 一張大?。?4 KB

        Glide.with( Activity2.this).load( url ).diskCacheStrategy(DiskCacheStrategy.ALL ).into( p_w_picpathView ) ;

               (4) DiskCacheStrategy.NONE :  沒有緩存圖片

                  Glide.with( Activity2.this).load( url ).diskCacheStrategy(DiskCacheStrategy.NONE ).into( p_w_picpathView ) ;

        7.4、 緩存場景測試

                  兩個p_w_picpathView ,一個 100 x 100 , 一個 300 x300 ;  先加載第一張,再加載第二張

  • 測試一 : 兩張圖片都在  DiskCacheStrategy.SOURCE 的情況下:         

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//加載第一張圖
      findViewById( R.id.bt1 ).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.SOURCE ).into( p_w_picpathView1 ) ;
          }
      });
 
      //加載第二張圖
      findViewById( R.id.bt2 ).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
              Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.SOURCE ).into( p_w_picpathView2 ) ;
          }
      });

  通過測試發(fā)現(xiàn),在加載第一張圖片的時候,緩存了2M 的原始圖,在加載第二張的時候,就不會再請求網(wǎng)絡(luò),直接從緩存中加載。

  •  測試二:第一張圖在 DiskCacheStrategy.SOURCE ,第二張在DiskCacheStrategy.RESULT 情況下 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//加載第一張圖
        findViewById( R.id.bt1 ).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.SOURCE ).into( p_w_picpathView1 ) ;
            }
        });
 
        //加載第二張圖
        findViewById( R.id.bt2 ).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.RESULT ).into( p_w_picpathView2 ) ;
            }
        });

通過測試發(fā)現(xiàn),加載第一張圖片的情況下,緩存了2M 的原始圖。在加載第二張圖片的時候,又請求網(wǎng)絡(luò),下載了 14 KB 的緩存。這說明,即使本地存在緩存,緩存策略不一樣,緩存就不會被重用。

    

  •  測試三:兩張圖都在 DiskCacheStrategy.RESULT 情況下 ,第一個Imageview大?。?100 x100 , 第二個p_w_picpathview大小:300 x 300 

         (1)先加載 100 x 100 , 加載出來后,緩存了 2 kB 的圖片 ,然后加載 300 x 300 ,又重新請求網(wǎng)絡(luò),緩存了 14 KB 的圖片 。緩存沒有復(fù)用。

         (2)先加載 300 x 300 , 加載出來后,緩存了 14 KB的圖片。然后加載 100 x 100 ,又重新請求網(wǎng)絡(luò),緩存了 2 KB 的圖片,緩存沒有復(fù)用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//加載第一張圖
    findViewById( R.id.bt1 ).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.RESULT ).into( p_w_picpathView1 ) ;
        }
    });
 
    //加載第二張圖
    findViewById( R.id.bt2 ).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Glide.with( Activity2.this).load( url ).diskCacheStrategy( DiskCacheStrategy.RESULT ).into( p_w_picpathView2 ) ;
        }
    });

 

  •  測試四:p_w_picpathView1  寬高:100 x 100  ;    p_w_picpathView2   寬高:300 x 300  ;     p_w_picpathView3    寬高:600 x 600 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//加載第二張圖
findViewById( R.id.bt1 ).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Glide.with( Activity2.this).load( url ).into( p_w_picpathView1 ) ;
    }
 
});
 
//加載第二張圖
findViewById( R.id.bt2 ).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Glid
本文標(biāo)題:android圖片加載庫Glide的使用介紹
分享路徑:http://weahome.cn/article/gpijho.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部

<abbr id="icmsc"><tbody id="icmsc"></tbody></abbr>
<pre id="icmsc"><noscript id="icmsc"></noscript></pre>
<samp id="icmsc"><tbody id="icmsc"></tbody></samp>
    <samp id="icmsc"><tbody id="icmsc"></tbody></samp>
    <ul id="icmsc"></ul>
  • <th id="icmsc"><s id="icmsc"></s></th>