美文网首页Android 干货自定义views Android开发经验
基于Glide V4.0封装的GlideImageView,可监

基于Glide V4.0封装的GlideImageView,可监

作者: 孙福生微博 | 来源:发表于2017-06-19 18:53 被阅读5269次

GlideImageView 是基于Glide V4.0设计的,实现如下特性:

1、通过提供的属性可以设置图片的圆角、边框。
2、可以设置点击触摸图片时的颜色、透明度。
3、一行代码加载来自网络、res、SDCard中的图片,可加载成圆形。
4、可以监听加载图片时的进度。

下面这张图是设置了图片的圆角、边框并设置了触摸图片时的颜色

一行代码加载来自网络、res、SDCard中图片

public GlideImageView loadImage(String url, int placeholderResId);
public GlideImageView loadLocalImage(@DrawableRes int resId, int placeholderResId); 
public GlideImageView loadLocalImage(String localPath, int placeholderResId);

一行代码加载来自网络、res、SDCard中图片成圆形

public GlideImageView loadCircleImage(String url, int placeholderResId); 
public GlideImageView loadLocalCircleImage(int resId, int placeholderResId);
public GlideImageView loadLocalCircleImage(String localPath, int placeholderResId);

如果你觉得上面的方法还不能满足你,那么你可以通过下面的方法追加自己想要的属性来加载图片

RequestOptions requestOptions(int placeholderResId);
RequestOptions circleRequestOptions(int placeholderResId);

GlideImageView load(int resId, RequestOptions options);
GlideImageView load(Uri uri, RequestOptions options);
GlideImageView load(String url, RequestOptions options);

如果你还是觉得得不到满足,好吧,我提供了GlideImageLoader类加载图片,比如这样加载图片:先加载缩略图再加载高清图片,并监听加载的进度

private void loadImage(String image_url_thumbnail, String image_url) {
    RequestOptions requestOptions = glideImageView.requestOptions(R.color.black)
            .centerCrop()
            .skipMemoryCache(true) // 跳过内存缓存
            .diskCacheStrategy(DiskCacheStrategy.NONE); // 不缓存到SDCard中

    glideImageView.getImageLoader().setOnGlideImageViewListener(image_url, new OnGlideImageViewListener() {
        @Override
        public void onProgress(int percent, boolean isDone, GlideException exception) {
            progressView.setProgress(percent);
            progressView.setVisibility(isDone ? View.GONE : View.VISIBLE);
        }
    });

    glideImageView.getImageLoader().requestBuilder(image_url, requestOptions)
            .thumbnail(Glide.with(ImageActivity.this) // 加载缩略图
                    .load(image_url_thumbnail)
                    .apply(requestOptions))
            .transition(DrawableTransitionOptions.withCrossFade()) // 动画渐变加载
            .into(glideImageView);
}

该库提供两种监听加载图片进度的Listener,总有一款是你想要的

public interface OnGlideImageViewListener {
    void onProgress(int percent, boolean isDone, GlideException exception);
}

public interface OnProgressListener {
    void onProgress(String imageUrl, long bytesRead, long totalBytes, boolean isDone, GlideException exception);
}

GitHub地址

关于我

个人邮箱:sfsheng0322@126.com

GitHub主页

简书主页

个人博客

新浪微博

相关文章

网友评论

  • 4f3571f08886:大神缓存路径在哪啊 ,怎么设置自己的缓存路径
  • J_Leo:通过添加依赖可以实现上面的效果,可是怎么去除触摸图片有灰色阴影的效果呢?
  • 咘諟倪:发现个问题,控件的点击事件需有ScrollView作为容器时才能触发,不然触发不了点击事件
    咘諟倪:补充一点,好像控件的点击事件存在触发不了的情况,就是点击灵敏度与正常的ImageVew控件有很大的差距
  • 根号仨:添加过度动画后transition(DrawableTransitionOptions.withCrossFade()),图片加载不会显示,使用Imageview过渡动画就没问题
  • 5014161d46ba:您好,项目框架依赖了Glide4.2,然后您的框架也依赖了,所以报java.util.zip.ZipException: duplicate entry: com/bumptech/glide/GeneratedAppGlideModuleImpl.class异常,请问您知道怎么解决吗?
  • feng_斩月:怎么计算gift播放时间
  • 我喂自己袋丶夏洛克:建议作者把注释写一写,没注释有一些方法的参数不知道什么作用,去看sample也没能找到对应的比如public GlideImageView loadLocalCircleImage(int resId, int placeholderResId);
  • 649d89c36d8a:加载本地相册的 图片详情怎么加进度条 因为没有缩略图的
    孙福生微博: @卢诗如 这个做不了吧,暂时没思路😀
  • 许大虎:两个问题
    1 有些不需要加载动画的时候咋办?因为那个AppGlideModule是全局的吧,只运行一次。这样都被拦截了。
    2 采用这种方式,好像缓存就被影响了。
  • a16bf6ec86bf:添加依赖 Error:Execution failed for task ':app:prepareDebugAndroidTestDependencies'.
    > Dependency Error. See console for details. 是怎么回事
    e7931506b063:apply plugin: 'com.android.application'

    ....
    android{
    defaultConfig{
    ....
    ...
    javaCompileOptions {
    annotationProcessorOptions {
    includeCompileClasspath true
    }
    }
    }
    }
    在build.gradle中添加这段代码就好了
    a16bf6ec86bf: @孙福生微博 只添加依赖就可以是吗?还用添加别的吗
    孙福生微博:@赵大哈 是不是你的网有问题? 现在问题解决了吗?
  • 才兄说:作者问一下,Glide4.0中,需要使用到模糊效果,这个API怎么调用。之前Glide的版本都有如.bitmapTransform(new BlurTransformation(context,23,4))的入口,发现4.0的结构改变还是蛮大的,设置高斯模糊入口你知道么?
    才兄说:.transform(new BlurTransformation(getContext(), 23, 4));找到了,查看了下Glide4.0文档,并且注意BlurTransformation类实现方法有变动,替换一下即可
  • 03a9db709e59:如果一个非imageview需要加载图片呢:blush:
    03a9db709e59:@孙福生微博 谢谢大神
    孙福生微博: @猫的戒指 那你就用里面的GlideImageLoader加载吧
  • c82bf09cf357:你好,有源码吗?想拜读一下。
    孙福生微博: @加菲糖 😀
    c82bf09cf357:找到了,github有源码,很厉害,嗯。

本文标题:基于Glide V4.0封装的GlideImageView,可监

本文链接:https://www.haomeiwen.com/subject/lmknqxtx.html