Android Glide图片加载(加载监听、加载动画)

Android Glide图片加载(加载监听、加载动画),第1张

概述本文实例为大家分享了AndroidGlide图片加载的具体代码,供大家参考,具体内容如下

本文实例为大家分享了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,Bitmap.Config.ARGB_8888);    if (result == null) {      result = Bitmap.createBitmap(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,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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android Glide图片加载(加载监听、加载动画)全部内容,希望文章能够帮你解决Android Glide图片加载(加载监听、加载动画)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147561.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存