Android Glide图片加载(加载监听、加载动画)
本文实例为大家分享了android glide图片加载的具体代码,供大家参考,具体内容如下
1.普通用法
glide.with(context) .load(url) .into(view);
with中可以放context、activity、fragment。。;当放activity、fragment时glide会根据生命周期来加载图片。推荐使用activity。
2.设置加载中和加载失败的图片
glide.with(context) .load(url) .placeholder(r.drawable.loading) //占位符 也就是加载中的图片,可放个gif .error(r.drawable.failed) //失败图片 .into(view);
3.添加图片淡入加载的效果
.crossfade()
4.用 animate() 自定义动画
从资源中的动画:
回到代码,第一个选项是传一个 android 资源 id,即动画的资源。一个简单的例子是每个 android 系统都提供的:slide-in-left(从左滑入)动画, android.r.anim.slide_in_left 。下面这段代码是这个动画的 xml 描述:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromxdelta="-50%p" android:toxdelta="0" android:duration="@android:integer/config_mediumanimtime"/> <alpha android:fromalpha="0.0" android:toalpha="1.0" android:duration="@android:integer/config_mediumanimtime" /> </set>
当然你可以创建你自己的 xml 动画。比如一个小的缩放动画,图片刚开始小的,然后逐渐增大到原尺寸。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:fillafter="true"> <scale android:duration="@android:integer/config_longanimtime" android:fromxscale="0.1" android:fromyscale="0.1" android:pivotx="50%" android:pivoty="50%" android:toxscale="1" android:toyscale="1"/> </set>
这两个动画都可以用到 glide 建造者中:
glide .with( context ) .load( eatfoodyimages[0] ) .animate( android.r.anim.slide_in_left ) // or r.anim.zoom_in .into( imageview1 );
在图片从网络加载完并准备好之后将从左边滑入。
通过自定义类实现动画
这个很简单,你只需实现 void animate(view view) 方法。这个视图对象是整个 target 视图。如果它是一个自定义的视图,你要找到你的视图的子元素,并且做些必要的动画。
来看个简单的例子。假设你想要实现一个渐现动画,你得需要创建这样的动画对象:
viewpropertyanimation.animator animationobject = new viewpropertyanimation.animator() { @override public void animate(view view) { // if it's a custom view class, cast it here // then find subviews and do the animations // here, we just use the entire view for the fade animation view.setalpha( 0f ); objectanimator fadeanim = objectanimator.offloat( view, "alpha", 0f, 1f ); fadeanim.setduration( 2500 ); fadeanim.start(); } };
接下来,你需要在 glide 请求中去设置这个动画:
glide .with( context ) .load( eatfoodyimages[1] ) .animate( animationobject ) .into( imageview2 );
当然,在 animate(view view) 中你的动画对象方法中, 你可以做任何你想要对视图做的事情。*的用你的动画创建吧。
如果你要在你的自定义视图中实现,你只需要创建这个视图对象,然后在你的自定义视图中创建你的自定义方法。
5.添加加载完成监听
glide.with(showimgactivity.this) .load(urlstring) .centercrop() .error(r.drawable.failed) .crossfade() .into(new glidedrawableimageviewtarget(imageview) { @override public void onresourceready(glidedrawable drawable, glideanimation anim) { super.onresourceready(drawable, anim); //在这里添加一些图片加载完成的操作 } )};
6.图片缓存机制
glide缓存策略
glide默认开启磁盘缓存和内存缓存,当然也可以对单张图片进行设置特定的缓存策略。
设置图片不加入到内存缓存
glide .with( context ) .load( eatfoodyimages[0] ) .skipmemorycache( true ) .into( imageviewinternet );
设置图片不加入到磁盘缓存
glide .with( context ) .load( eatfoodyimages[0] ) .diskcachestrategy( diskcachestrategy.none ) .into( imageviewinternet );
glide支持多种磁盘缓存策略:
diskcachestrategy.none :不缓存图片
diskcachestrategy.source :缓存图片源文件
diskcachestrategy.result:缓存修改过的图片
diskcachestrategy.all:缓存所有的图片,默认
图片加载优先级
glide支持为图片加载设置优先级,优先级高的先加载,优先级低的后加载:
private void loadimagewithhighpriority() { glide .with( context ) .load( usageexamplelistviewadapter.eatfoodyimages[0] ) .priority( priority.high ) .into( imageviewhero ); } private void loadimageswithlowpriority() { glide .with( context ) .load( usageexamplelistviewadapter.eatfoodyimages[1] ) .priority( priority.low ) .into( imageviewlowprioleft ); glide .with( context ) .load( usageexamplelistviewadapter.eatfoodyimages[2] ) .priority( priority.low ) .into( imageviewlowprioright ); }
7.加载圆角图片
/** * 圆形图 * * created by <lzh> on 2016/7/29. */ 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(); } }
**然后使用的时候只要加上这句话就行了
.transform(new glidecircletransform(context))**
glide.with(mcontext) .load(imageurl) .transform(new glidecircletransform(mcontext)) .into(holder.imageview);
注意事项:
不能直接给要使用glide的imageview设置tag;
因为glide在加载图片的时候用到了tag,会造成冲突,并报错;
当要用到tag写逻辑代码的时候,可以这样
.settag(r.string.xxx,xxx);并.gettag(r.string.xxx);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。