依赖4.2之后的
//加载圆形图片 Glide.with(context).load(data.get(position).getPic()) .apply(RequestOptions.bitmapTransform(new CircleCrop())) .into(holder.iv1); holder.tv1.setText(data.get(position).getTitle()); holder.tv2.setText(data.get(position).getCollect_num()); holder.tv3.setText(data.get(position).getNum()+"");
主方法
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
protected ImageView iv;
protected Button btn;
protected String item;
private String STR_TAG = "--->***";
private String TAG = this.getClass().getSimpleName();
protected String result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
initView();
}
private void initView() {
iv = (ImageView) findViewById(R.id.iv);
btn = (Button) findViewById(R.id.btn);
Button btn2 = (Button) findViewById(R.id.btn2);
btn.setOnClickListener(MainActivity.this);
btn2.setOnClickListener(MainActivity.this);
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.btn) {
show();
} else if (view.getId() == R.id.btn2) {
show0();
}
}
private void show0() {
String[] items = {
"0加载图片来自File",
"1加载图片来自资源id",
"2加载图片来自uri",
"3加载强制转化为gif",
"4加载原图的缩略图",
"5加载缩略图高级方式",
"6加载设置不缓存",
"7加载设置优先级",
"8加载回调后的图片",
"9加载回调后的图片设置尺寸",
"10加载图片圆角转换",
"11加载图片圆角转换2",
};
new AlertDialog.Builder(this)
.setTitle("glide操作2")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
selectedA0();
break;
case 1:
selectedA1();
break;
case 2:
selectedA2();
break;
case 3:
selectedA3();
break;
case 4:
selectedA4();
break;
case 5:
selectedA5();
break;
case 6:
selectedA6();
break;
case 7:
selectedA7();
break;
case 8:
selectedA8();
break;
case 9:
selectedA9();
break;
case 10:
selectedA10();
break;
case 11:
selectedA11();
break;
case 12:
break;
}
}
}).create()
.show();
}
private void selectedA11() {
//RoundedCorners,
//CenterInside
Glide.with(this)
.load(UC.IMAGE_URL_A11)
.apply(
new RequestOptions()
.override(300)
.transform(new RoundedCorners(20))
)
.into(iv);
}
private void selectedA10() {
Glide.with(this)
.load(UC.IMAGE_URL_A10)
.apply(new RequestOptions().transform(new GlideRoundTransform(this)))
.into(iv);
}
private void selectedA9() {
//强制Glide返回一个Bitmap
SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>(300, 300) {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
iv.setImageBitmap(resource);
}
};
Glide.with(this).asBitmap()
.load(UC.IMAGE_URL_A9)
.into(target
);
}
private void selectedA8() {
//上面这段代码不要写成匿名内部类的机制,原因就是java的自动垃圾回收机制可能在图片还没有加载好的时候就已经把你的Target回收了
//注意.with()里面的参数,Glide的请求是和传进去的Context共存亡的,如果传一个Activity进去,当Activity GG过后,你的请求也就GG了,但是如果这样传:.with(context.getApplicationContext() ).当你的Activity GG过后,请求还是会继续,回调还是会继续。
//强制Glide返回一个Bitmap
SimpleTarget<Bitmap> target = new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
iv.setImageBitmap(resource);
}
};
Glide.with(this).asBitmap()
.load(UC.IMAGE_URL_A8)
.into(target
);
}
private void selectedA7() {
Glide.with(this)
.load(UC.IMAGE_URL_A7)
.apply(new RequestOptions().priority(Priority.LOW))
.into(iv);
}
private void selectedA6() {
Glide.with(this)
.load(UC.IMAGE_URL_A6)
.apply(new RequestOptions().skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE))
.into(iv);
}
private void selectedA5() {
//先加载第一张图片作为缩略图,在加载最终要显示的图片
//thumbnail中加载的是缩略图
Glide.with(this).load(UC.IMAGE_URL_9)
.thumbnail(Glide.with(this).load(UC.IMAGE_URL_A5)).into(iv);
}
private void selectedA4() {
//先加载为原图的十分之一,后再加载原图.
Glide.with(this)
.load(UC.IMAGE_URL_A4)
.thumbnail(0.1f)
.into(iv);
}
private void selectedA3() {
Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
}
private void selectedA2() {
Glide.with(this)
.load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "d.jpg")))
.into(iv);
}
private void selectedA1() {
Glide.with(this)
.load(R.mipmap.ic_launcher_round)
.into(iv);
}
private void selectedA0() {
File file = new File(Environment.getExternalStorageDirectory(), "3.jpg");
Glide.with(this).load(file).into(iv);
}
private void show() {
final String[] items = {
"0加载图片一般用法",
"1加载图片成功监听",
"2加载图片失败",
"3加载图片ID占位图",
"4加载图片Drawable占位图",
"5加载图片传入null",
"6加载图片后修改宽高",
"7加载图片后修改宽高等尺寸",
"8加载图片centerCrop",
"9加载图片fitCenter",
"10加载图片centerInside",
"11加载图片circleCrop",
"12加载动态图的第一帧",
"13加载动态图成功",
"14加载本地视频缩略图",
};
new AlertDialog.Builder(this)
.setTitle("glide操作选项")
.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
item = items[which] + STR_TAG;
switch (which) {
case 0:
selected0();
break;
case 1:
selected1();
break;
case 2:
selected2();
break;
case 3:
selected3();
break;
case 4:
selected4();
break;
case 5:
selected5();
break;
case 6:
selected6();
break;
case 7:
selected7();
break;
case 8:
selected8();
break;
case 9:
selected9();
break;
case 10:
selected10();
break;
case 11:
selected11();
break;
case 12:
selected12();
break;
case 13:
selected13();
break;
case 14:
selected14();
break;
}
}
}).create()
.show();
}
private void selected14() {
//缩略图的加载
String name = "v.f40.mp4";
Glide.with(this).load(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), name)))
.into(iv);
}
private void selected13() {
//GIF加载,URL指向的资源必须是gif,如果是普通图片则不显示。
//相反,如果指向正确但没有执行asGif方法,则只是作为普通图片展示
Glide.with(this).asGif().load(UC.GIF_URL_0).into(iv);
}
private void selected12() {
//可理解为加载动态图的第一帧的Bitmap,比如Gif
Glide.with(this).asBitmap().
load(UC.GIF_URL_0).into(iv);
}
private void selected11() {
Glide.with(this)
.load(UC.IMAGE_URL_11)
.apply(new RequestOptions().circleCrop())
.into(iv);
}
private void selected10() {
Glide.with(this)
.load(UC.IMAGE_URL_10)
.apply(new RequestOptions().centerInside())
.into(iv);
}
private void selected9() {
Glide.with(this)
.load(UC.IMAGE_URL_8)
.apply(new RequestOptions().fitCenter())
.into(iv);
}
private void selected8() {
RequestOptions options = new RequestOptions()
.centerCrop();
Glide.with(this)
.load(UC.IMAGE_URL_9)
.apply(options)
.into(iv);
}
private void selected7() {
RequestOptions options = new RequestOptions().override(300).fitCenter();
Glide.with(this)
.load(UC.IMAGE_URL_1)
.apply(options)
.into(iv);
}
private void selected6() {
RequestOptions options = new RequestOptions().override(400, 400).fitCenter();
Glide.with(this).load(UC.IMAGE_URL_1)
.apply(options)
.into(iv);
}
private void selected5() {
RequestOptions options = new RequestOptions()
.fallback(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this)
.load(null)
.apply(options)
.into(iv);
}
private void selected4() {
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.load);
Drawable drawable = new BitmapDrawable(getResources(), bitmap);
RequestOptions options = new RequestOptions().placeholder(drawable);
Glide.with(this)
.load(UC.IMAGE_URL_ERROR)
.apply(options)
.into(iv);
}
private void selected3() {
RequestOptions options = new RequestOptions()
.placeholder(R.mipmap.load)
.error(R.mipmap.fail)
.fallback(R.mipmap.ic_launcher)
.diskCacheStrategy(DiskCacheStrategy.NONE);
Glide.with(this)
.load(UC.IMAGE_URL_ERROR)
.apply(options)
.into(iv);
}
private void selected2() {
Glide.with(this)
.load(UC.IMAGE_URL_ERROR)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed失败");
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady成功");
return false;
}
}).into(iv);
}
private void selected1() {
Glide.with(this)
.load(UC.IMAGE_URL_1)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
DemonstrateUtil.showToastResult(MainActivity.this, "onLoadFailed加载失败!");
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
DemonstrateUtil.showToastResult(MainActivity.this, "onResourceReady加载成功!");
return false;
}
})
.into(iv);
}
private void selected0() {
//默认使用原图加载,内存缓存,磁盘缓存,
Glide.with(this).load(UC.IMAGE_URL_0).into(iv);
}
}
//实现圆角图片类
/**
*实现圆角效果.
*/
public class GlideRoundTransform extends BitmapTransformation {
private float radius = 0f;
public GlideRoundTransform(Context context) {
this(context, 20);
}
public GlideRoundTransform(Context context, int dp) {
super(context);
//density,屏幕密度.1.5,1,0.75
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override
protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
//Bitmap.Config.ARGB_8888,图片质量.
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();
//REPEAT,MIRROR,CLAMP{重复,镜像,拉伸}
//设置着色器
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
//设置抗锯齿.
paint.setAntiAlias(true);
//矩阵,(float left, float top, float right, float bottom)
//矩形的左边的x坐标,矩形的顶部的Y坐标,对右侧的矩形的x坐标,矩形的底部的Y坐标
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
//画指定的圆矩形。
//drawRoundRect(RectF rect, float rx, float ry, @NonNull Paint paint)
//矩阵,圆角,椭圆的x半径,y半径.画笔,
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
@Override
public void updateDiskCacheKey(MessageDigest messageDigest) {
}
}
//不确定
public class MyTransformation implements Transformation<Bitmap> {
private BitmapPool mBitmapPool;
private int mWidth;
private int mHeight;
public MyTransformation(Context context) {
this(Glide.get(context).getBitmapPool());
}
public MyTransformation(BitmapPool pool) {
this.mBitmapPool = pool;
}
@Override
public Resource<Bitmap> transform(Context context, Resource<Bitmap> resource, int outWidth, int outHeight) {
Bitmap source = resource.get();
int size = Math.min(source.getWidth(), source.getHeight());
mWidth = (source.getWidth() - size) / 2;
mHeight = (source.getHeight() - size) / 2;
Bitmap.Config config =
source.getConfig() != null ? source.getConfig() : Bitmap.Config.ARGB_8888;
Bitmap bitmap = mBitmapPool.get(mWidth, mHeight, config);
if (bitmap == null) {
bitmap = Bitmap.createBitmap(source, mWidth, mHeight, size, size);
}
return BitmapResource.obtain(bitmap, mBitmapPool);
}
@Override
public void updateDiskCacheKey(MessageDigest messageDigest) {
}
}
//示例图片地址
public interface UC {
String IMAGE_URL_0 = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f.jpg";
String IMAGE_URL_1 = "http://img3.a0bi.com/upload/ttq/20160621/1466508726953.jpg";
String IMAGE_URL_8= "http://www.285868.com/uploadfile/2016/1027/20161027102235543.jpg";
String IMAGE_URL_ERROR = "http://p0.so.qhmsg.com/t010b9ba7c1e568dd3f66.jpg";
String IMAGE_URL_9 = "http://img2.3lian.com/2014/f3/51/d/2.jpg";
String IMAGE_URL_10 = "http://www.5djiaren.com/uploads/2015-10/24-175904_894.jpg";
String IMAGE_URL_11 = "http://tupian.enterdesk.com/2013/mxy/0810/1/4.jpg";
String IMAGE_URL_12 = "http://thumb.takefoto.cn/wp-content/uploads/2016/03/201603211236327864.jpg";
String GIF_URL_0 = "http://uploads.rayli.com.cn/2016/0823/1471943453795.gif";
String VIDEO_RUL_0 = "http://1251603248.vod2.myqcloud.com/4c9adaa7vodtransgzp1251603248/30e0819d9031868223192061218/v.f40.mp4";
String IMAGE_URL_A4 = "http://www.hinews.cn/pic/0/10/24/62/10246261_856361.jpg";
String IMAGE_URL_A5 = "http://img1.gtimg.com/0/1/168/16805_1200x1000_0.jpg";
String IMAGE_URL_A6 = "http://img.mp.itc.cn/upload/20161104/d5737b849b6442ea9f594ddc3cbbc23a_th.jpeg";
String IMAGE_URL_A7 = "http://5.26923.com/download/pic/000/330/4a9bfbb14275471e5ec956ad416b6194.jpg";
String IMAGE_URL_A8 = "http://pic1.win4000.com/wallpaper/8/55f91ad3a23ea.jpg";
String IMAGE_URL_A9 = "http://www.hinews.cn/pic/0/14/00/69/14006911_715505.jpg";
String IMAGE_URL_A10 = "http://p4.so.qhmsg.com/t0199c5431414d2ea29.jpg";
String IMAGE_URL_A11 = "http://p2.cri.cn/M00/1C/C0/CqgNOlm4oreAHkbcAAAAAAAAAAA69.3200x2000.jpeg";
String IMAGE_URL_A12 = "http://img1.qq.com/ent/pics/10742/10742073.jpg";
}