Glide的每个功能点进的介绍:
在gradle添加依赖:compile 'com.github.bumptech.glide:glide:3.8.0'
添加依赖网络权限:<uses-permission android:name="android.permission.INTERNET"/>
public class MainActivity extends AppCompatActivity { ImageView myImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myImg = (ImageView) findViewById(R.id.myImg); //使用Glide 加载图片 Glide.with(this).load("https://www.baidu.com/img/bdlogo.png").into(myImg); } }
Glide 后续之 :Glide-transformations 图形转换工具:
在gradle添加依赖:compile 'jp.wasabeef:glide-transformations:2.0.1'
1.异步加载:
ImageView targetImageView = (ImageView) findViewById(R.id.ImageView);
String imageUrl = "http://218.192.170.132/1.jpg";
Glide.with(context).load(imageUrl).into(targetImageView);
2.设置加载尺寸:
Glide.with(context).load(imageUrl).override(800, 800).into(imageView);
3.设置加载成功、失败图片
Glide .with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(imageView);
4.设置加载动画
Glide.with(this).load(imageUrl).animate(R.anim.item_alpha_in).into(imageView);
R.anim.item_alpha_in.xml内容:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:duration="500" android:fromAlpha="0.0" android:toAlpha="1.0"/>
set>
5.多样式的媒体加载
Glide.with(context)
.load(imageUrl);//传了一个0.1f 作为参数,Glide将会显示原始图像的10%的大小。如果原始图像有1000x1000像素,那么缩略图将会有100x100像素。
.thumbnail(0.1f);//设置缩略图支持:先加载缩略图 然后在加载全图。
.asBitmap()//显示gif静态图片
.asGif();//显示gif动态图片
.into(imageView);
6.关于缓存
Glide.with(this).load(imageUrl).diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
//缓存参数//RESULT:缓存转换后的资源(最终的图像,即降低分辨率后的(或者是转换后的)设置跳过内存缓存
7.设置跳过内存缓存
Glide .with(this).load(imageUrl).skipMemoryCache(true).into(imageView);
//设置跳过内存缓存//这里需要明白的是,这只是会影响内存缓存!Glide 将会仍然利用磁盘缓存来避免重复的网络请求。
8.清理缓存
Glide.get(this).clearDiskCache();//清理磁盘缓存 需要在子线程中执行
Glide.get(this).clearMemory();//清理内存缓存 可以在UI主线程中进行
9.动态转换
Glide.with(this).load(imageUrl).centerCrop().into(imageView);
10.自定义圆角 或 圆形 图片
public class MainActivity extends AppCompatActivity { ImageView myImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myImg = (ImageView) findViewById(R.id.myImg); //Glide 加载 用户自定义的圆角或圆形图形 Glide.with(MainActivity.this) .load("https://www.baidu.com/img/bdlogo.png") .transform(new GlideRoundTransform(MainActivity.this, 35)).into(myImg); } }
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; public class GlideRoundTransform extends BitmapTransformation { private static float radius = 0f; private static int d=0; public GlideRoundTransform(Context context) { this(context, 4); } public GlideRoundTransform(Context context, int d) { super(context); this.d=d; this.radius =Resources.getSystem().getDisplayMetrics().density * d;//35* 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=null; if(d==0){//圆形 int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; if (result == null) { result = Bitmap.createBitmap(source, x, y, size, size); } 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()); float r = size / 2f; canvas.drawCircle(r, r, r, paint); }else {//自定义角度 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() { if(d==0){ return getClass().getName();//圆形 }else{ return getClass().getName()+ Math.round(radius);//自定义角度 } } }在gradle添加依赖:compile 'jp.wasabeef:glide-transformations:2.0.1'
Glide 后续之 :Glide-transformations 图形转换工具:
public class MainActivity extends AppCompatActivity { ImageView myImg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myImg = (ImageView) findViewById(R.id.myImg); //Glide-transformations 图形转换 // :30为圆角半径 0为填充边界 CornerType.BOTTOM为设置的边角类型 Glide.with(MainActivity.this) .load("https://www.baidu.com/img/bdlogo.png") .bitmapTransform(new RoundedCornersTransformation(MainActivity.this, 30, 0, RoundedCornersTransformation.CornerType.BOTTOM)) .into(myImg); } }
.into(targetImageView);
1.设置 圆形
Glide.with(this)
.load(url)
.bitmapTransform(new CropCircleTransformation(this)) .into(mImageView2);
2.设置 正方形
Glide.with(this)
.load(url)
.bitmapTransform(new CropSquareTransformation(this)) .into(mImageView2);
3.设置 圆角
Glide.with(this) .load(url) .bitmapTransform(
new RoundedCornersTransformation(this, 100, 0, RoundedCornersTransformation.CornerType.ALL) )
.into(mImageView2);
//构造方法 RoundedCornersTransformation(Context context, int radius, int margin, CornerType cornerType)
// radius :圆角半径
// margin :填充边界
// cornerType :边角类型(可以指定4个角中的哪几个角是圆角,哪几个不是)
4.设置 自定义矩形
Glide.with(this) .load(url) .bitmapTransform(new CropTransformation(this, 600, 200, CropTransformation.CropType.CENTER)) .into(mImageView);
// 构造方法 CropTransformation(Context context, int width, int height, CropType cropType)
// width : 剪裁宽度
// height : 剪裁高度
// cropType : 剪裁类型(指定剪裁位置,可以选择上、中、下其中一种)
5.设置 颜色转换
1.颜色滤镜
Glide.with(this)
.load(url)
.bitmapTransform(new ColorFilterTransformation(this, 0x7900CCCC)) .into(mImageView);
// 使用构造方法 ColorFilterTransformation(Context context, int color)
// Color :蒙层颜色值
2.灰度级转换
Glide.with(this)
.load(url)
.bitmapTransform(new GrayscaleTransformation(this))
.into(mImageView2);
3.模糊处理
Glide.with(this)
.load(url)
.bitmapTransform(new BlurTransformation(this, 100, 2)) .into(mImageView);
// 使用构造方法 BlurTransformation(Context context, int radius, int sampling)
// radius : 离散半径/模糊度(单参构造器 - 默认25)
// sampling : 取样(单参构造器 - 默认1) 如果取2,横向、纵向都会每两个像素点取一个像素点(即:图片宽高变为原来一半)
4.遮罩掩饰(视图叠加处理)
Glide.with(this)
.load(url)
.bitmapTransform(new MaskTransformation(this, R.mipmap.ic_launcher)) .into(mImageView);
// 使用构造方法 MaskTransformation(Context context, int maskId)
// maskId :遮罩物文件ID
5.GPU过滤(需要依赖GPUImage库)
需依赖GPUImage库:
compile
'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.3.0'
Glide.with(this)
.load(url)
.bitmapTransform(new ToonFilterTransformation(this, 0.2F, 10F)) .into(mImageView2);
// 使用构造方法 ToonFilterTransformation(Context context, float threshold, float quantizationLevels)
// threshold :阀值(单参构造器 - 默认0.2F)影响色块边界的描边效果
// quantizationLevels :量化等级(单参构造器 - 默认10.0F)影响色块色彩
6.乌墨色滤波器
Glide.with(this)
.load(url)
.bitmapTransform(new SepiaFilterTransformation(this, 1.0F)) .into(mImageView2);
// 使用构造方法 SepiaFilterTransformation(Context context, float intensity)
// intensity 渲染强度(单参构造器 - 默认1.0F)
7.对比度滤波器
Glide.with(this)
.load(url)
.bitmapTransform(new ContrastFilterTransformation(this, 3F)) .into(mImageView2);
// 使用构造方法 ContrastFilterTransformation(Context context, float contrast)
// contrast 对比度 (单参构造器 - 默认1.0F)
8.反转滤波器
Glide.with(this)
.load(url)
.bitmapTransform(new InvertFilterTransformation(this))
.into(mImageView);
9.素描滤波器
Glide.with(this)
.load(url)
.bitmapTransform(new SketchFilterTransformation(this))
.into(mImageView);
10.旋转滤波器
Glide.with(this) .load(url) .bitmapTransform(new SwirlFilterTransformation(this, 1.0F, 0.4F, new PointF(0.5F, 0.5F))) .into(mImageView);
// 使用构造方法 SwirlFilterTransformation(Context context, float radius, float angle, PointF center)
// radius 旋转半径[0.0F,1.0F] (单参构造器 - 默认0.5F)
// angle 角度[0.0F,无穷大)(单参构造器 - 默认1.0F)视图表现为旋转圈数
// center 旋转中心点 (单参构造器 - 默认new PointF(0.5F,0.5F))