Android Glide图片加载(加载监听、加载动画)
本文实例为大家分享了AndroidGlide图片加载的具体代码,供大家参考,具体内容如下
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描述:
<?xmlversion="1.0"encoding="utf-8"?> <setxmlns:android="http://schemas.android.com/apk/res/android"> <translateandroid:fromXDelta="-50%p"android:toXDelta="0" android:duration="@android:integer/config_mediumAnimTime"/> <alphaandroid:fromAlpha="0.0"android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime"/> </set>
当然你可以创建你自己的XML动画。比如一个小的缩放动画,图片刚开始小的,然后逐渐增大到原尺寸。
<?xmlversion="1.0"encoding="utf-8"?> <setxmlns: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)//orR.anim.zoom_in .into(imageView1);
在图片从网络加载完并准备好之后将从左边滑入。
通过自定义类实现动画
这个很简单,你只需实现voidanimate(Viewview)方法。这个视图对象是整个target视图。如果它是一个自定义的视图,你要找到你的视图的子元素,并且做些必要的动画。
来看个简单的例子。假设你想要实现一个渐现动画,你得需要创建这样的动画对象:
ViewPropertyAnimation.AnimatoranimationObject=newViewPropertyAnimation.Animator(){
@Override
publicvoidanimate(Viewview){
//ifit'sacustomviewclass,castithere
//thenfindsubviewsanddotheanimations
//here,wejustusetheentireviewforthefadeanimation
view.setAlpha(0f);
ObjectAnimatorfadeAnim=ObjectAnimator.ofFloat(view,"alpha",0f,1f);
fadeAnim.setDuration(2500);
fadeAnim.start();
}
};
接下来,你需要在Glide请求中去设置这个动画:
Glide .with(context) .load(eatFoodyImages[1]) .animate(animationObject) .into(imageView2);
当然,在animate(Viewview)中你的动画对象方法中,你可以做任何你想要对视图做的事情。自由的用你的动画创建吧。
如果你要在你的自定义视图中实现,你只需要创建这个视图对象,然后在你的自定义视图中创建你的自定义方法。
5.添加加载完成监听
Glide.with(ShowImgActivity.this)
.load(urlString)
.centerCrop()
.error(R.drawable.failed)
.crossFade()
.into(newGlideDrawableImageViewTarget(imageView){
@Override
publicvoidonResourceReady(GlideDrawabledrawable,GlideAnimationanim){
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支持为图片加载设置优先级,优先级高的先加载,优先级低的后加载:
privatevoidloadImageWithHighPriority(){
Glide
.with(context)
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.priority(Priority.HIGH)
.into(imageViewHero);
}
privatevoidloadImagesWithLowPriority(){
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.加载圆角图片
/**
*圆形图
*
*Createdby<lzh>on2016/7/29.
*/
publicclassGlideCircleTransformextendsBitmapTransformation{
publicGlideCircleTransform(Contextcontext){
super(context);
}
@Override
protectedBitmaptransform(BitmapPoolpool,BitmaptoTransform,intoutWidth,intoutHeight){
returncircleCrop(pool,toTransform);
}
privatestaticBitmapcircleCrop(BitmapPoolpool,Bitmapsource){
if(source==null)returnnull;
intsize=Math.min(source.getWidth(),source.getHeight());
intx=(source.getWidth()-size)/2;
inty=(source.getHeight()-size)/2;
//TODOthiscouldbeacquiredfromthepooltoo
Bitmapsquared=Bitmap.createBitmap(source,x,y,size,size);
Bitmapresult=pool.get(size,size,Bitmap.Config.ARGB_8888);
if(result==null){
result=Bitmap.createBitmap(size,size,Bitmap.Config.ARGB_8888);
}
Canvascanvas=newCanvas(result);
Paintpaint=newPaint();
paint.setShader(newBitmapShader(squared,BitmapShader.TileMode.CLAMP,BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
floatr=size/2f;
canvas.drawCircle(r,r,r,paint);
returnresult;
}
@Override
publicStringgetId(){
returngetClass().getName();
}
}
**然后使用的时候只要加上这句话就行了
.transform(newGlideCircleTransform(context))**
Glide.with(mContext) .load(imageUrl) .transform(newGlideCircleTransform(mContext)) .into(holder.imageView);
注意事项:
不能直接给要使用glide的imageview设置tag;
因为glide在加载图片的时候用到了tag,会造成冲突,并报错;
当要用到tag写逻辑代码的时候,可以这样
.setTag(R.string.xxx,xxx);并.getTag(R.string.xxx);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。