成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

android圖片加載庫(kù)Glide的使用介紹

一:簡(jiǎn)介

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

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

 

三:使用方法及簡(jiǎn)介

     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();
   }

五、注意事項(xiàng)

    5.1、在使用時(shí)需要給app添加聯(lián)網(wǎng)權(quán)限,沒(méi)有權(quán)限不會(huì)報(bào)錯(cuò),但是圖片加載不出來(lái),很坑爹?!?/p>

1
2
3
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

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

六、使用方法總結(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)聽(tīng)(下載完成后顯示)

?

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<Bitmap>() {
        @Override
        public void onResourceReady(Bitmap bitmap, GlideAnimation glideAnimation) {
            //圖片加載完成
            p_w_picpathView.setImageBitmap(bitmap);
        }
    };
}

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

     6.3 占位符 placeholder() 方法:在加載開(kāi)始 -- 加載完成,這段時(shí)間顯示的圖片。如果加載失敗,則最終顯示占位符。
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 ) ;

     在加載開(kāi)始--> 加載完成(失敗),顯示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 圖片加載庫(kù) Glide 的使用介紹

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

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

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

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

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

  • 請(qǐng)求會(huì)在onStop的時(shí)候自動(dòng)暫停,

  • 在onStart的時(shí)候重新啟動(dòng),gif的動(dòng)畫(huà)也會(huì)在onStop的時(shí)候停止,以免在后臺(tái)消耗電量。

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

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

      android 圖片加載庫(kù) Glide 的使用介紹

      默認(rèn)的是 : NORMAL

   android 圖片加載庫(kù) Glide 的使用介紹

       實(shí)例:

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)先級(jí)只是在加載的過(guò)程中起一個(gè)參考作用, 并不決定真正的加載順序。

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

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

      android 圖片加載庫(kù) Glide 的使用介紹

      默認(rèn)的是 : NORMAL

   android 圖片加載庫(kù) Glide 的使用介紹

       實(shí)例:

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)先級(jí)只是在加載的過(guò)程中起一個(gè)參考作用, 并不決定真正的加載順序。

 

     6.11 縮略圖的支持      

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

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

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

1
2
3
4
DrawableRequestBuilder<Integer> 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 動(dòng)圖
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 則會(huì)顯示一張靜態(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ò)視頻無(wú)法加載。

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

 

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

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

  • .dontAnimate()   不使用任何動(dòng)畫(huà)       

 
    6.15  glide 內(nèi)存緩存

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

    

七、自定義 GlideModule

         自定義 GlideModule 的好處:

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

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

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

       7.1 首先定義一個(gè)類實(shí)現(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) {
 
    }
}

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

     

     7.2 然后在 AndroidManifest.xml 去申明你寫(xiě)的 SimpleGlideModule 
1
2
3
<meta-data
    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 圖片加載庫(kù) Glide 的使用介紹

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

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

  android 圖片加載庫(kù) Glide 的使用介紹         
         最后一個(gè)完整的自定義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才能訪問(wèn)到
        // builder.setDiskCache( new InternalCacheDiskCacheFactory( context , diskCacheSize )) ;
        // builder.setDiskCache( new InternalCacheDiskCacheFactory( context , diskCachePath , diskCacheSize  )) ;
 
        //自定義磁盤緩存:這種緩存存在SD卡上,所有的應(yīng)用都可以訪問(wèn)到
        builder.setDiskCache(new DiskLruCacheFactory( diskCachePath , diskCacheSize ));
 
    }
 
    @Override
    public void registerComponents(Context context, Glide glide) {
 
    }
}

八、緩存管理

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

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

           android 圖片加載庫(kù) Glide 的使用介紹   

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

           android 圖片加載庫(kù) Glide 的使用介紹

 

        7.2、緩存模式

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

  • DiskCacheStrategy.SOURCE    緩存原圖

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

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

  • DiskCacheStrategy.NONE        不做任何緩存

      android 圖片加載庫(kù) Glide 的使用介紹

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

          android 圖片加載庫(kù) Glide 的使用介紹

         7.3 四種緩存模式對(duì)比

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

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

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

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

               (1) DiskCacheStrategy.SOURCE  : 只會(huì)緩存一張圖片,大?。?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 , 一張大小:14 KB

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

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

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

        7.4、 緩存場(chǎng)景測(cè)試

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

  • 測(cè)試一 : 兩張圖片都在  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 ) ;
          }
      });

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

  •  測(cè)試二:第一張圖在 DiskCacheStrategy.SOURCE ,第二張?jiān)贒iskCacheStrategy.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 ) ;
            }
        });

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

    

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

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

         (2)先加載 300 x 300 , 加載出來(lái)后,緩存了 14 KB的圖片。然后加載 100 x 100 ,又重新請(qǐng)求網(wǎng)絡(luò),緩存了 2 KB 的圖片,緩存沒(méi)有復(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 ) ;
        }
    });

 

  •  測(cè)試四:p_w_picpathView1  寬高:100 x 100  ;    p_w_picpathView2   寬高:300 x 300  ;     p_w_picpathView3    寬高:600 x 600 

<i id="ohzsl"></i>
  • 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

    當(dāng)前題目:android圖片加載庫(kù)Glide的使用介紹
    新聞來(lái)源:http://jinyejixie.com/article40/gpijho.html

    成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、品牌網(wǎng)站制作做網(wǎng)站、網(wǎng)站制作建站公司、外貿(mào)網(wǎng)站建設(shè)

    廣告

    聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

    高雄市| 琼结县| 祁阳县| 石狮市| 牟定县| 抚松县| 兰溪市| 云霄县| 北票市| 镇雄县| 钦州市| 安溪县| 勃利县| 汽车| 仪陇县| 会理县| 五莲县| 如皋市| 石河子市| 迁安市| 革吉县| 遂平县| 乌鲁木齐县| 赣榆县| 通江县| 元氏县| 和政县| 武宁县| 毕节市| 桐梓县| 黄龙县| 铅山县| 遵义县| 连云港市| 卓尼县| 松阳县| 阳曲县| 瑞金市| 新沂市| 铁岭市| 介休市|