Android 平滑图片加载和缓存库 Glide

来源:互联网 发布:爱的算法免费下载 编辑:程序博客网 时间:2024/06/07 11:31

转载:http://www.codeceo.com/article/android-glide-usage.html
1.如果你刚好使用了这个圆形Imageview库或者其他的一些自定义的圆形Imageview,而你又刚好设置了占位的话,那么,你就会遇到第一个问题。如何解决呢?
方案一: 不设置占位;
方案二:使用Glide的Transformation API自定义圆形Bitmap的转换。这里是一个已有的例子;
方案三:使用下面的代码加载图片:

Glide.with(mContext)    .load(url)     .placeholder(R.drawable.loading_spinner)    .into(new SimpleTarget<Bitmap>(width, height) {        @Override         public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {            // setImageBitmap(bitmap) on CircleImageView         }     };

于第二个问题,请记住一句话:不要再非主线程里面使用Glide加载图片,如果真的使用了,请把context参数换成getApplicationContext。更多的细节请参考这个issue。
3.为什么不能设置Tag,是因为你使用的姿势不对哦。如何为ImageView设置Tag呢?且听我细细道来。
方案一:使用setTag(int,object)方法设置tag,具体用法如下:
Java代码是酱紫的:

Glide.with(context).load(urls.get(i).getUrl()).fitCenter().into(imageViewHolder.image);        imageViewHolder.image.setTag(R.id.image_tag, i);        imageViewHolder.image.setOnClickListener(new View.OnClickListener() {            @Override                int position = (int) v.getTag(R.id.image_tag);                Toast.makeText(context, urls.get(position).getWho(), Toast.LENGTH_SHORT).show();            }        });

同时在values文件夹下新建ids.xml,添加

大功告成!
方案二:从Glide的3.6.0之后,新添加了全局设置的方法。具体方法如下:
先实现GlideMoudle接口,全局设置ViewTaget的tagId:

public class MyGlideMoudle implements GlideModule{    @Override    public void applyOptions(Context context, GlideBuilder builder) {        ViewTarget.setTagId(R.id.glide_tag_id);    }    @Override    public void registerComponents(Context context, Glide glide) {    }}

同样,也需要在ids.xml下添加id

<item name="glide_tag_id" type="id"/>

最后在AndroidManifest.xml文件里面添加

<meta-data    android:name="com.yourpackagename.MyGlideMoudle"    android:value="GlideModule" />

又可以愉快的玩耍了,嘻嘻`(∩_∩)′。
方案三:写一个继承自ImageViewTaget的类,复写它的

get/setRequest方法。Glide.with(context).load(urls.get(i).getUrl()).fitCenter().into(new ImageViewTarget<GlideDrawable>(imageViewHolder.image) {            @Override            protected void setResource(GlideDrawable resource) {                imageViewHolder.image.setImageDrawable(resource);            }            @Override            public void setRequest(Request request) {                imageViewHolder.image.setTag(i);                imageViewHolder.image.setTag(R.id.glide_tag_id,request);            }            @Override            public Request getRequest() {                return (Request) imageViewHolder.image.getTag(R.id.glide_tag_id);            }        });        imageViewHolder.image.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                int position = (int) v.getTag();                Toast.makeText(context, urls.get(position).getWho(), Toast.LENGTH_SHORT).show();            }        });

一些使用技巧
1.Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()
当列表在滑动的时候,调用pauseRequests()取消请求,滑动停止时,调用resumeRequests()恢复请求。这样是不是会好些呢?
2.Glide.clear()
当你想清除掉所有的图片加载请求时,这个方法可以帮助到你。
3.ListPreloader
如果你想让列表预加载的话,不妨试一下ListPreloader这个类。

0 0
原创粉丝点击