Glide图片加载框架学习及常用方法封装
github地址:https://github.com/bumptech/glide
因为项目中引用了OkHttp框架,都是一家公司的项目,我这里的依赖如下:
- compile 'com.github.bumptech.glide:glide:3.7.0'
- compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
- compile 'com.squareup.okhttp3:okhttp:3.1.2'
实现效果图如下:
GlideTestActivity.java:
- package com.czhappy.kuaizhi.activity;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.ProgressBar;
- import com.bumptech.glide.Glide;
- import com.bumptech.glide.load.resource.drawable.GlideDrawable;
- import com.bumptech.glide.request.animation.GlideAnimation;
- import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;
- import com.czhappy.kuaizhi.R;
- import com.czhappy.kuaizhi.glide.GlideImgManager;
- import butterknife.BindView;
- import butterknife.ButterKnife;
- import butterknife.OnClick;
- /**
- * Description:
- * User: chenzheng
- * Date: 2016/9/8 0008
- * Time: 09:01
- */
- public class GlideTestActivity extends BaseActivity {
- @BindView(R.id.imageview1)
- ImageView imageview1;
- @BindView(R.id.imageview2)
- ImageView imageview2;
- @BindView(R.id.imageview3)
- ImageView imageview3;
- @BindView(R.id.imageview4)
- ImageView imageview4;
- @BindView(R.id.imageview5)
- ImageView imageview5;
- @BindView(R.id.textview1)
- Button textview1;
- @BindView(R.id.imageview6)
- ImageView imageview6;
- @BindView(R.id.progressBar)
- ProgressBar progressBar;
- private String imageArr[] = {"http://pic14.nipic.com/20110607/6776092_111031284000_2.jpg",
- "http://cdn.duitang.com/uploads/item/201507/13/20150713235634_UKdLB.jpeg",
- "http://att2.citysbs.com/taizhou/2011/08/27/101937_kuumaaio_40ee6a85b8df443965c4ca5e6f5d80fa.jpg"};
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.activity_glide_test);
- ButterKnife.bind(this);
- initView();
- }
- private void initView() {
- //加载网络图片(普通)
- GlideImgManager.loadImage(this, imageArr[0], imageview1);
- //加载网络图片(圆角)
- GlideImgManager.loadRoundCornerImage(this, imageArr[1], imageview2);
- //加载网络图片(圆形)
- GlideImgManager.loadCircleImage(this, imageArr[2], imageview3);
- //加载项目中的图片
- GlideImgManager.loadImage(this, R.mipmap.ic_launcher, imageview4);
- //加载网络图片(GIF)
- String gifUrl = "http://ww4.sinaimg.cn/mw690/bcc93f49gw1f6r1nce77jg207x07sx6q.gif";
- GlideImgManager.loadGifImage(this, gifUrl, imageview5);
- }
- //加载进度监听
- private void loadListener() {
- Glide.with(this)
- .load(imageArr[0])
- .into(new GlideDrawableImageViewTarget(imageview6) {
- @Override
- public void onResourceReady(GlideDrawable drawable, GlideAnimation anim) {
- super.onResourceReady(drawable, anim);
- progressBar.setVisibility(View.GONE);
- }
- @Override
- public void onStart() {
- super.onStart();
- progressBar.setVisibility(View.VISIBLE);
- }
- });
- }
- @OnClick(R.id.textview1)
- public void onClick(View view) {
- switch (view.getId()) {
- case R.id.textview1:
- loadListener();
- break;
- }
- }
- }
activity_glide_test.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/white">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
- <ImageView
- android:id="@+id/imageview1"
- android:layout_width="200dp"
- android:layout_height="160dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <ImageView
- android:id="@+id/imageview2"
- android:layout_width="200dp"
- android:layout_height="160dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <ImageView
- android:id="@+id/imageview3"
- android:layout_width="200dp"
- android:layout_height="200dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <ImageView
- android:id="@+id/imageview4"
- android:layout_width="200dp"
- android:layout_height="200dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <ImageView
- android:id="@+id/imageview5"
- android:layout_width="200dp"
- android:layout_height="200dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <Button
- android:id="@+id/textview1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_margin="10dp"
- android:padding="10dp"
- android:text="进度条加载" />
- <FrameLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal">
- <ImageView
- android:id="@+id/imageview6"
- android:layout_width="200dp"
- android:layout_height="160dp"
- android:layout_gravity="center_horizontal"
- android:layout_margin="10dp"
- android:scaleType="fitXY" />
- <ProgressBar
- android:id="@+id/progressBar"
- android:layout_width="32dp"
- android:layout_height="32dp"
- android:layout_gravity="center"
- android:indeterminate="false"
- android:visibility="gone" />
- </FrameLayout>
- </LinearLayout>
- </ScrollView>
下面就是代码中所用到的Glide加载图片时所用到的工具类:
GlideImgManager.java:
- package com.czhappy.kuaizhi.glide;
- import android.content.Context;
- import android.widget.ImageView;
- import com.bumptech.glide.Glide;
- import com.bumptech.glide.load.engine.DiskCacheStrategy;
- import com.czhappy.kuaizhi.R;
- import java.io.File;
- /**
- * Description:
- * User: chenzheng
- * Date: 2016/8/31 0031
- * Time: 15:43
- */
- public class GlideImgManager {
- public static void loadImage(Context context, String url, int erroImg, int emptyImg, ImageView iv) {
- //原生 API
- Glide.with(context).load(url).placeholder(emptyImg).error(erroImg).into(iv);
- }
- public static void loadImage(Context context, String url, ImageView iv) {
- //原生 API
- Glide.with(context).load(url).crossFade().placeholder(R.drawable.empty_photo).error(R.drawable.empty_photo).into(iv);
- }
- public static void loadGifImage(Context context, String url, ImageView iv) {
- Glide.with(context).load(url).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).placeholder(R.drawable.empty_photo).error(R.drawable.empty_photo).into(iv);
- }
- public static void loadCircleImage(Context context, String url, ImageView iv) {
- Glide.with(context).load(url).placeholder(R.drawable.empty_photo).error(R.drawable.empty_photo).transform(new GlideCircleTransform(context)).into(iv);
- }
- public static void loadRoundCornerImage(Context context, String url, ImageView iv) {
- Glide.with(context).load(url).placeholder(R.drawable.empty_photo).error(R.drawable.empty_photo).transform(new GlideRoundTransform(context,10)).into(iv);
- }
- public static void loadImage(Context context, final File file, final ImageView imageView) {
- Glide.with(context)
- .load(file)
- .into(imageView);
- }
- public static void loadImage(Context context, final int resourceId, final ImageView imageView) {
- Glide.with(context)
- .load(resourceId)
- .into(imageView);
- }
- }
GlideCircleTransform.java:
- package com.czhappy.kuaizhi.glide;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapShader;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
- import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
- /**
- * Description:
- * User: chenzheng
- * Date: 2016/8/31 0031
- * Time: 15:42
- */
- public class GlideCircleTransform extends BitmapTransformation {
- public GlideCircleTransform(Context context) {
- super(context);
- }
- @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
- return circleCrop(pool, toTransform);
- }
- private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
- if (source == null) return null;
- int size = Math.min(source.getWidth(), source.getHeight());
- int x = (source.getWidth() - size) / 2;
- int y = (source.getHeight() - size) / 2;
- // TODO this could be acquired from the pool too
- Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
- Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
- if (result == null) {
- result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
- }
- Canvas canvas = new Canvas(result);
- Paint paint = new Paint();
- paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
- paint.setAntiAlias(true);
- float r = size / 2f;
- canvas.drawCircle(r, r, r, paint);
- return result;
- }
- @Override public String getId() {
- return getClass().getName();
- }
- }
GlideRoundTransform.java:
- package com.czhappy.kuaizhi.glide;
- import android.content.Context;
- import android.content.res.Resources;
- import android.graphics.Bitmap;
- import android.graphics.BitmapShader;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.graphics.RectF;
- import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
- import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
- /**
- * Description:
- * User: chenzheng
- * Date: 2016/8/31 0031
- * Time: 15:42
- */
- public class GlideRoundTransform extends BitmapTransformation {
- private static 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 static 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);
- }
- }
当前工具类支持网络图片加载、圆角图片、圆形图片、手机本地图片、项目图片、gif图片等等,简单实用