Glide的使用學習


MainActivity

  1 import android.app.AlertDialog;
  2 import android.content.DialogInterface;
  3 import android.graphics.Bitmap;
  4 import android.graphics.BitmapFactory;
  5 import android.graphics.drawable.BitmapDrawable;
  6 import android.graphics.drawable.Drawable;
  7 import android.net.Uri;
  8 import android.os.Bundle;
  9 import android.os.Environment;
 10 import android.support.annotation.Nullable;
 11 import android.support.v7.app.AppCompatActivity;
 12 import android.view.View;
 13 import android.widget.Button;
 14 import android.widget.ImageView;
 15 
 16 import com.bumptech.glide.Glide;
 17 import com.bumptech.glide.Priority;
 18 import com.bumptech.glide.load.DataSource;
 19 import com.bumptech.glide.load.engine.DiskCacheStrategy;
 20 import com.bumptech.glide.load.engine.GlideException;
 21 import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
 22 import com.bumptech.glide.request.RequestListener;
 23 import com.bumptech.glide.request.RequestOptions;
 24 import com.bumptech.glide.request.target.SimpleTarget;
 25 import com.bumptech.glide.request.target.Target;
 26 import com.bumptech.glide.request.transition.Transition;
 27 import com.example.demonstrate.DemonstrateUtil;
 28 
 29 import java.io.File;
 30 
 31 public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 32 
 33     protected ImageView iv;
 34     protected Button btn;
 35     protected String item;
 36     private String STR_TAG = "--->***";
 37     private String TAG = this.getClass().getSimpleName();
 38     protected String result;
 39 
 40     @Override
 41     protected void onCreate(Bundle savedInstanceState) {
 42         super.onCreate(savedInstanceState);
 43         super.setContentView(R.layout.activity_main);
 44 
 45         initView();
 46     }
 47 
 48     private void initView() {
 49         iv = (ImageView) findViewById(R.id.iv);
 50         btn = (Button) findViewById(R.id.btn);
 51         Button btn2 = (Button) findViewById(R.id.btn2);
 52         btn.setOnClickListener(MainActivity.this);
 53         btn2.setOnClickListener(MainActivity.this);
 54     }
 55 
 56     @Override
 57     public void onClick(View view) {
 58         if (view.getId() == R.id.btn) {
 59             show();
 60         } else if (view.getId() == R.id.btn2) {
 61             show0();
 62         }
 63     }
 64 
 65     private void show0() {
 66         String[] items = {
 67                 "0加載圖片來自File",
 68                 "1加載圖片來自資源id",
 69                 "2加載圖片來自uri",
 70                 "3加載強制轉化為gif",
 71                 "4加載原圖的縮略圖",
 72                 "5加載縮略圖高級方式",
 73                 "6加載設置不緩存",
 74                 "7加載設置優先級",
 75                 "8加載回調后的圖片",
 76                 "9加載回調后的圖片設置尺寸",
 77                 "10加載圖片圓角轉換",
 78                 "11加載圖片圓角轉換2",
 79         };
 80         new AlertDialog.Builder(this)
 81                 .setTitle("glide操作2")
 82                 .setItems(items, new DialogInterface.OnClickListener() {
 83                     @Override
 84                     public void onClick(DialogInterface dialog, int which) {
 85                         switch (which) {
 86                             case 0:
 87                                 selectedA0();
 88                                 break;
 89                             case 1:
 90                                 selectedA1();
 91                                 break;
 92                             case 2:
 93                                 selectedA2();
 94                                 break;
 95                             case 3:
 96                                 selectedA3();
 97                                 break;
 98                             case 4:
 99                                 selectedA4();
100                                 break;
101                             case 5:
102                                 selectedA5();
103                                 break;
104                             case 6:
105                                 selectedA6();
106                                 break;
107                             case 7:
108                                 selectedA7();
109                                 break;
110                             case 8:
111                                 selectedA8();
112                                 break;
113                             case 9:
114                                 selectedA9();
115                                 break;
116                             case 10:
117                                 selectedA10();
118                                 break;
119                             case 11:
120                                 selectedA11();
121                                 break;
122                             case 12:
123                                 break;
124                         }
125                     }
126                 }).create()
127                 .show();
128     }
129 
130     private void selectedA11() {
131         //RoundedCorners,
132         //CenterInside
133         Glide.with(this)
134                 .load(UC.IMAGE_URL_A11)
135                 .apply(
136                         new RequestOptions()
137                                 .override(300)
138                                 .transform(new RoundedCorners(20))
139                 )
140                 .into(iv);
141     }
142 
143     private void selectedA10() {
144         Glide.with(this)
145                 .load(UC.IMAGE_URL_A10)
146                 .apply(new RequestOptions().transform(new GlideRoundTransform(this)))
147                 .into(iv);
148     }
149 
150     private void selectedA9() {
151         //強制Glide返回一個Bitmap
152         SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>(300, 300) {
153             @Override
154             public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
155                 iv.setImageBitmap(resource);
156             }
157         };
158         Glide.with(this).asBitmap()
159                 .load(UC.IMAGE_URL_A9)
160                 .into(target
161                 );
162     }
163 
164 
165     private void selectedA8() {
166         //上面這段代碼不要寫成匿名內部類的機制,原因就是java的自動垃圾回收機制可能在圖片還沒有加載好的時候就已經把你的Target回收了
167         //注意.with()里面的參數,Glide的請求是和傳進去的Context共存亡的,如果傳一個Activity進去,當Activity GG過后,你的請求也就GG了,但是如果這樣傳:.with(context.getApplicationContext() ).當你的Activity GG過后,請求還是會繼續,回調還是會繼續。
168 
169 
170         //強制Glide返回一個Bitmap
171         SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() {
172             @Override
173             public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
174                 iv.setImageBitmap(resource);
175             }
176         };
177         Glide.with(this).asBitmap()
178                 .load(UC.IMAGE_URL_A8)
179                 .into(target
180                 );
181     }
182 
183     private void selectedA7() {
184         Glide.with(this)
185                 .load(UC.IMAGE_URL_A7)
186                 .apply(new RequestOptions().priority(Priority.LOW))
187                 .into(iv);
188     }
189 
190     private void selectedA6() {
191         Glide.with(this)
192                 .load(UC.IMAGE_URL_A6)
193                 .apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE))
194                 .into(iv);
195     }
196 
197     private void selectedA5() {
198         //先加載第一張圖片作為縮略圖,在加載最終要顯示的圖片
199         //thumbnail中加載的是縮略圖
200         Glide.with(this).load(UC.IMAGE_URL_9)
201                 .thumbnail(Glide.with(this).load(UC.IMAGE_URL_A5)).into(iv);
202     }
203 
204     private void selectedA4() {
205         //先加載為原圖的十分之一,后再加載原圖.
206         Glide.with(this)
207                 .load(UC.IMAGE_URL_A4)
208                 .thumbnail(0.1f)
209                 .into(iv);
210     }
211 
212     private void selectedA3() {
213         Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
214     }
215 
216     private void selectedA2() {
217         Glide.with(this)
218                 .load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "d.jpg")))
219                 .into(iv);
220     }
221 
222     private void selectedA1() {
223         Glide.with(this)
224                 .load(R.mipmap.ic_launcher_round)
225                 .into(iv);
226     }
227 
228     private void selectedA0() {
229         File file = new File(Environment.getExternalStorageDirectory(), "3.jpg");
230         Glide.with(this).load(file).into(iv);
231     }
232 
233     private void show() {
234         final String[] items = {
235                 "0加載圖片一般用法",
236                 "1加載圖片成功監聽",
237                 "2加載圖片失敗",
238                 "3加載圖片ID占位圖",
239                 "4加載圖片Drawable占位圖",
240                 "5加載圖片傳入null",
241                 "6加載圖片后修改寬高",
242                 "7加載圖片后修改寬高等尺寸",
243                 "8加載圖片centerCrop",
244                 "9加載圖片fitCenter",
245                 "10加載圖片centerInside",
246                 "11加載圖片circleCrop",
247                 "12加載動態圖的第一幀",
248                 "13加載動態圖成功",
249                 "14加載本地視頻縮略圖",
250 
251         };
252         new AlertDialog.Builder(this)
253                 .setTitle("glide操作選項")
254                 .setItems(items, new DialogInterface.OnClickListener() {
255                     @Override
256                     public void onClick(DialogInterface dialog, int which) {
257                         item = items[which] + STR_TAG;
258                         switch (which) {
259                             case 0:
260                                 selected0();
261                                 break;
262                             case 1:
263                                 selected1();
264                                 break;
265                             case 2:
266                                 selected2();
267                                 break;
268                             case 3:
269                                 selected3();
270                                 break;
271                             case 4:
272                                 selected4();
273                                 break;
274                             case 5:
275                                 selected5();
276                                 break;
277                             case 6:
278                                 selected6();
279                                 break;
280                             case 7:
281                                 selected7();
282                                 break;
283                             case 8:
284                                 selected8();
285                                 break;
286                             case 9:
287                                 selected9();
288                                 break;
289                             case 10:
290                                 selected10();
291                                 break;
292                             case 11:
293                                 selected11();
294                                 break;
295                             case 12:
296                                 selected12();
297                                 break;
298                             case 13:
299                                 selected13();
300                                 break;
301                             case 14:
302                                 selected14();
303                                 break;
304                         }
305                     }
306                 }).create()
307                 .show();
308     }
309 
310     private void selected14() {
311         //縮略圖的加載
312         String name = "v.f40.mp4";
313         Glide.with(this).load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), name)))
314                 .into(iv);
315     }
316 
317     private void selected13() {
318         //GIF加載,URL指向的資源必須是gif,如果是普通圖片則不顯示。
319         //相反,如果指向正確但沒有執行asGif方法,則只是作為普通圖片展示
320         Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
321     }
322 
323     private void selected12() {
324         //可理解為加載動態圖的第一幀的Bitmap,比如Gif
325         Glide.with(this).asBitmap().
326                 load(UC.GIF_URL_0).into(iv);
327     }
328 
329     private void selected11() {
330         Glide.with(this)
331                 .load(UC.IMAGE_URL_11)
332                 .apply(new RequestOptions().circleCrop())
333                 .into(iv);
334     }
335 
336     private void selected10() {
337         Glide.with(this)
338                 .load(UC.IMAGE_URL_10)
339                 .apply(new RequestOptions().centerInside())
340                 .into(iv);
341     }
342 
343     private void selected9() {
344         Glide.with(this)
345                 .load(UC.IMAGE_URL_8)
346                 .apply(new RequestOptions().fitCenter())
347                 .into(iv);
348     }
349 
350     private void selected8() {
351         RequestOptions options = new RequestOptions()
352                 .centerCrop();
353         Glide.with(this)
354                 .load(UC.IMAGE_URL_9)
355                 .apply(options)
356                 .into(iv);
357     }
358 
359     private void selected7() {
360         RequestOptions options = new RequestOptions().override(300).fitCenter();
361         Glide.with(this)
362                 .load(UC.IMAGE_URL_1)
363                 .apply(options)
364                 .into(iv);
365     }
366 
367     private void selected6() {
368         RequestOptions options = new RequestOptions().override(400, 400).fitCenter();
369         Glide.with(this).load(UC.IMAGE_URL_1)
370                 .apply(options)
371                 .into(iv);
372     }
373 
374     private void selected5() {
375         RequestOptions options = new RequestOptions()
376                 .fallback(R.mipmap.ic_launcher)
377                 .diskCacheStrategy(DiskCacheStrategy.NONE);
378         Glide.with(this)
379                 .load(null)
380                 .apply(options)
381                 .into(iv);
382     }
383 
384     private void selected4() {
385         Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.load);
386         Drawable drawable = new BitmapDrawable(getResources(), bitmap);
387         RequestOptions options = new RequestOptions().placeholder(drawable);
388         Glide.with(this)
389                 .load(UC.IMAGE_URL_ERROR)
390                 .apply(options)
391                 .into(iv);
392     }
393 
394     private void selected3() {
395         RequestOptions options = new RequestOptions()
396                 .placeholder(R.mipmap.load)
397                 .error(R.mipmap.fail)
398                 .fallback(R.mipmap.ic_launcher)
399                 .diskCacheStrategy(DiskCacheStrategy.NONE);
400         Glide.with(this)
401                 .load(UC.IMAGE_URL_ERROR)
402                 .apply(options)
403                 .into(iv);
404     }
405 
406     private void selected2() {
407         Glide.with(this)
408                 .load(UC.IMAGE_URL_ERROR)
409                 .listener(new RequestListener<Drawable>() {
410                     @Override
411                     public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
412                         DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed失敗");
413                         return false;
414                     }
415 
416                     @Override
417                     public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
418                         DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady成功");
419                         return false;
420                     }
421                 }).into(iv);
422     }
423 
424     private void selected1() {
425 
426         Glide.with(this)
427                 .load(UC.IMAGE_URL_1)
428                 .listener(new RequestListener<Drawable>() {
429                     @Override
430                     public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
431                         DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed加載失敗!");
432                         return false;
433                     }
434 
435                     @Override
436                     public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
437                         DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady加載成功!");
438                         return false;
439                     }
440                 })
441                 .into(iv);
442     }
443 
444     private void selected0() {
445         //默認使用原圖加載,內存緩存,磁盤緩存,
446         Glide.with(this).load(UC.IMAGE_URL_0).into(iv);
447     }
448 
449 
450 }

實現圓角效果類

 1 import android.content.Context;
 2 import android.content.res.Resources;
 3 import android.graphics.Bitmap;
 4 import android.graphics.BitmapShader;
 5 import android.graphics.Canvas;
 6 import android.graphics.Paint;
 7 import android.graphics.RectF;
 8 
 9 import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
10 import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
11 
12 import java.security.MessageDigest;
13 
14 
15 /**
16  *實現圓角效果.
17  */
18 
19 public class GlideRoundTransform extends BitmapTransformation {
20     private float radius = 0f;
21 
22     public GlideRoundTransform(Context context) {
23         this(context, 20);
24     }
25 
26     public GlideRoundTransform(Context context, int dp) {
27         super(context);
28         //density,屏幕密度.1.5,1,0.75
29         this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
30     }
31 
32     @Override
33     protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
34         return roundCrop(pool, toTransform);
35     }
36 
37     private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
38         if (source == null) return null;
39         //Bitmap.Config.ARGB_8888,圖片質量.
40         Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
41 
42         if (result == null) {
43             result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
44         }
45         Canvas canvas = new Canvas(result);
46         Paint paint = new Paint();
47         //REPEAT,MIRROR,CLAMP{重復,鏡像,拉伸}
48         //設置着色器
49         paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
50         //設置抗鋸齒.
51         paint.setAntiAlias(true);
52         //矩陣,(float left, float top, float right, float bottom)
53         //矩形的左邊的x坐標,矩形的頂部的Y坐標,對右側的矩形的x坐標,矩形的底部的Y坐標
54         RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
55         //畫指定的圓矩形。
56         //drawRoundRect(RectF rect, float rx, float ry, @NonNull Paint paint)
57         //矩陣,圓角,橢圓的x半徑,y半徑.畫筆,
58         canvas.drawRoundRect(rectF, radius, radius, paint);
59         return result;
60 
61     }
62 
63     @Override
64     public void updateDiskCacheKey(MessageDigest messageDigest) {
65 
66     }
67 }

MyTransformation設置Bitmap寬高

 1 import android.content.Context;
 2 import android.graphics.Bitmap;
 3 
 4 import com.bumptech.glide.Glide;
 5 import com.bumptech.glide.load.Transformation;
 6 import com.bumptech.glide.load.engine.Resource;
 7 import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
 8 import com.bumptech.glide.load.resource.bitmap.BitmapResource;
 9 
10 import java.security.MessageDigest;
11 
12 /**
13  * Created by think on 2017/10/25.
14  */
15 
16 public class MyTransformation implements Transformation<Bitmap> {
17 
18     private BitmapPool mBitmapPool;
19     private int mWidth;
20     private int mHeight;
21 
22     public MyTransformation(Context context) {
23         this(Glide.get(context).getBitmapPool());
24     }
25 
26     public MyTransformation(BitmapPool pool) {
27         this.mBitmapPool = pool;
28     }
29 
30     @Override
31     public Resource<Bitmap> transform(Context context, Resource<Bitmap> resource, int outWidth, int outHeight) {
32         Bitmap source = resource.get();
33         int size = Math.min(source.getWidth(), source.getHeight());
34 
35         mWidth = (source.getWidth() - size) / 2;
36         mHeight = (source.getHeight() - size) / 2;
37 
38         Bitmap.Config config =
39                 source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
40         Bitmap bitmap = mBitmapPool.get(mWidth, mHeight, config);
41         if (bitmap == null) {
42             bitmap = Bitmap.createBitmap(source, mWidth, mHeight, size, size);
43         }
44 
45         return BitmapResource.obtain(bitmap, mBitmapPool);
46     }
47 
48     @Override
49     public void updateDiskCacheKey(MessageDigest messageDigest) {
50 
51     }
52 }

自定義網絡圖片

 1 public interface UC {
 2     String IMAGE_URL_0 = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f.jpg";
 3     String IMAGE_URL_1 = "http://img3.a0bi.com/upload/ttq/20160621/1466508726953.jpg";
 4     String IMAGE_URL_8= "http://www.285868.com/uploadfile/2016/1027/20161027102235543.jpg";
 5     String IMAGE_URL_ERROR = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f66.jpg";
 6     String IMAGE_URL_9 = "http://img2.3lian.com/2014/f3/51/d/2.jpg";
 7     String IMAGE_URL_10 = "http://www.5djiaren.com/uploads/2015-10/24-175904_894.jpg";
 8     String IMAGE_URL_11 = "http://tupian.enterdesk.com/2013/mxy/0810/1/4.jpg";
 9     String IMAGE_URL_12 = "http://thumb.takefoto.cn/wp-content/uploads/2016/03/201603211236327864.jpg";
10 
11     String GIF_URL_0 = "http://uploads.rayli.com.cn/2016/0823/1471943453795.gif";
12     String VIDEO_RUL_0 = "http://1251603248.vod2.myqcloud.com/4c9adaa7vodtransgzp1251603248/30e0819d9031868223192061218/v.f40.mp4";
13     String IMAGE_URL_A4 = "http://www.hinews.cn/pic/0/10/24/62/10246261_856361.jpg";
14     String IMAGE_URL_A5 = "http://img1.gtimg.com/0/1/168/16805_1200x1000_0.jpg";
15     String IMAGE_URL_A6 = "http://img.mp.itc.cn/upload/20161104/d5737b849b6442ea9f594ddc3cbbc23a_th.jpeg";
16     String IMAGE_URL_A7 = "http://5.26923.com/download/pic/000/330/4a9bfbb14275471e5ec956ad416b6194.jpg";
17     String IMAGE_URL_A8 = "http://pic1.win4000.com/wallpaper/8/55f91ad3a23ea.jpg";
18     String IMAGE_URL_A9 = "http://www.hinews.cn/pic/0/14/00/69/14006911_715505.jpg";
19     String IMAGE_URL_A10 = "http://p4.so.qhmsg.com/t0199c5431414d2ea29.jpg";
20     String IMAGE_URL_A11 = "http://p2.cri.cn/M00/1C/C0/CqgNOlm4oreAHkbcAAAAAAAAAAA69.3200x2000.jpeg";
21     String IMAGE_URL_A12 = "http://img1.qq.com/ent/pics/10742/10742073.jpg";
22 }

在清單加入權限

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

在build中加入Glide依賴

 1 compile 'com.github.bumptech.glide:glide:4.2.0' 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM