Android 使用Glide加载网络图片等比例缩放的实现方法

在做android图片加载的时候,由于手机屏幕受限,很多大图加载过来的时候,我们要求等比例缩放,比如按照固定的宽度,等比例缩放高度,使得图片的尺寸比例得到相应的缩放,但图片没有变形。显然按照android:scaleType不能实现,因为会有很多限制,所以必须要自己写算法。

通过Glide来缩放

其实glide提供了这样的方法。具体是显示继承Transformation 的 setResource 方法。

(1) 先获取网络或本地图片的宽高
(2) 获取需要的目标宽
(3) 按比例得到目标的高度
(4) 按照目标的宽高创建新图

/**
 * ===========================================
 * 版  本:1.0
 * 描  述:设置图片等比缩放
 * <p>glide处理图片.</p>
 * ===========================================
 */
public class TransformationUtils extends ImageViewTarget<Bitmap> {
  private ImageView target;
  public TransformationUtils(ImageView target) {
    super(target);
    this.target = target;
  }
  @Override
  protected void setResource(Bitmap resource) {
    view.setImageBitmap(resource);
    //获取原图的宽高
    int width = resource.getWidth();
    int height = resource.getHeight();
    //获取imageView的宽
    int imageViewWidth = target.getWidth();
    //计算缩放比例
    float sy = (float) (imageViewWidth * 0.1) / (float) (width * 0.1);
    //计算图片等比例放大后的高
    int imageViewHeight = (int) (height * sy);
    ViewGroup.LayoutParams params = target.getLayoutParams();
    params.height = imageViewHeight;
    target.setLayoutParams(params);
  }
}

之后在Glide设置transform       

Glide.with(this)
          .load(newActiviteLeftBannerUrl)
          .asBitmap()
          .placeholder(R.drawable.placeholder)
          .into(new TransformationUtils(target));

Transformation 这是Glide的一个非常强大的功能了,它允许你在load图片 -> into ImageView 中间这个过成对图片做一系列的变换。比如你要做图片高斯模糊、添加圆角、做度灰处理、圆形图片等等都可以通过Transformation来完成。

总结

以上所述是小编给大家介绍的Android 使用Glide加载网络图片等比例缩放的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Glide4 高效加载图片的配置详解

    本文介绍了Glide4 高效加载图片的配置详解,分享给大家,具体如下: 在build.gradle中添加glide依赖 // glide 依赖 compile 'com.github.bumptech.glide:glide:4.6.1' // glide 相关注解,生成GlideApp代码 annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' // Glide网络库配置成okhttp3 compile ('com.gith

  • Android Glide 4.0+使用详解

    下载和设置 Android SDK 要求 使用最低要求 - 使用 Glide 要求 SDK 版本为 API 14 (Ice Cream Sandwich) 及以上. 编译最低要求 - 编译 Glide 要在 SDK 版本为 API 26 (Oreo) 及以上. jar 你可以直接在 GitHub下载最新的jar包 Gradle 如果使用 Gradle,可从 Maven Central 或 JCenter 中添加对 Glide 的依赖.同样,你还需要添加 Android 支持库的依赖. repos

  • Glide4.6.1 GlideApp无法生成的问题的解决

    本文介绍了Glide4.6.1 GlideApp 无法生成的问题的解决,分享给大家,具体如下: 依赖配置如下 Glide 4.6.1的sdk build版本必须为>=27,必须保证所有的support 的版本为相同并且为27.1.0 compile 'com.github.bumptech.glide:glide:4.6.1' annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1' compile 'com.android.s

  • 浅谈Glide缓存key的问题

    最近项目里面有个地方是在前面用glide加载图片后,后面再另外一个地方加载相同图片时没有复用glide的缓存,而是自己另外又重新缓存了一套. 查找后发现问题是glide缓存的key不一致的问题. 从key的生成可以看到和很多参数有关,逐一排查后,发现了width和height还有id不一样.这3个是项目外面传进来的. EngineKey key = keyFactory.buildKey(id, signature, width, height, loadProvider.getCacheDec

  • Android基于Glide v4.x的图片加载进度监听

    Glide是一款优秀的图片加载框架,简单的配置便可以使用起来,为开发者省下了很多的功夫.不过,它没有提供其加载图片进度的api,对于这样的需求,实现起来还真颇费一番周折. 尝试 遇到这个需求,第一反应是网上肯定有人实现过,不妨借鉴一下别人的经验. Glide加载图片实现进度条效果 可惜,这个实现是基于3.7版本的,4.0版本以上的glide改动比较大,using函数已经被移除了 using() The using() API was removed in Glide 4 to encourage

  • 详解Android中Glide与CircleImageView加载圆形图片的问题

    最近在项目中遇到了一个奇怪的问题,Glide和CircleImageView一起使用加载圆形头像,发现第一次死活都加载出来,出来的是一张占位图,当你刷新的时候或者第二次进入的时候才能加载出来.究其原因,CircleImageView 把位置占了.这时候我们有如下4种解决方案,不管是哪一种都是可以解决的(亲测可行). 1. 不使用占位符 注释掉这两句代码即可. .placeholder(R.drawable.normal_photo) .error(R.drawable.normal_photo)

  • Android将Glide动态加载不同大小的图片切圆角与圆形的方法

    Glide加载动态图片 首先我们先要去依赖一个githup:bumptech:glide:glide:3.7.0包: 使用Glide结合列表的样式进行图片加载: 1) 如果使用的是ListView,可以直接在Adapter的getView方法中使用: @Override public View getView(int position, View convertView, ViewGroup parent) { if (null == convertView) { //..... } Glide

  • Android中Glide获取图片Path、Bitmap用法详解

    我们在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path.Bitmap用法,以及实现的代码分析. 1. 获取Bitmap: 1)在图片下载缓存好之后获取 Glide.with(mContext).load(url).asBitmap().into(new SimpleTarget<Bitmap>() { @Override public void onResourceReady(Bitmap resource, Gli

  • 导入takephoto库编译失败与glide库冲突应排除依赖

    导入takephoto库编译失败与glide库冲突 当您的项目中导入了glide库, 同时也导入了takephoto库时, 出现编译失败. 编译报错指向于Glide库某文件 原因: 这是因为takephoto库中本身依赖了三个库,其中一个库是照片墙的库multipleimageselect 从github上打开该开的build.gradle可以看到该库又依赖了glide库. 所以发生依赖冲突问题. 以现在各库更新情况, takephoto是4.0.3 multipleimageselect 是1

  • Android利用Glide获取图片真正的宽高的实例

    前言 有时候需要获取网络图片的宽高来设置图片显示的大小,很多人会直接利用Glide的加载监听去拿图片的宽高,但是这样拿到的不是图片真正的宽高,而是图片显示在ImageView后的宽高.如下: //获取图片显示在ImageView后的宽高 Glide.with(this) .load(imgUrl) .asBitmap()//强制Glide返回一个Bitmap对象 .listener(new RequestListener<String, Bitmap>() { @Override public

  • android中Glide实现加载图片保存至本地并加载回调监听

    Glide 加载图片使用到的两个记录 Glide 加载图片保存至本地指定路径 /** * Glide 加载图片保存到本地 * * imgUrl 图片地址 * imgName 图片名称 */ Glide.with(context).load(imgUrl).asBitmap().toBytes().into(new SimpleTarget<byte[]>() { @Override public void onResourceReady(byte[] bytes, GlideAnimation

  • Android中Glide获取缓存大小并清除缓存图片

    清除Glide缓存 Glide自带清除缓存的功能,分别对应Glide.get(context).clearDiskCache();(清除磁盘缓存)与Glide.get(context).clearMemory();(清除内存缓存)两个方法.其中clearDiskCache()方法必须运行在子线程,clearMemory()方法必须运行在主线程,这是这两个方法所强制要求的,详见源码. 获取Glide缓存空间大小 这个网上也有过一些介绍,但是给出的实现代码存在一些问题,我这里做了一定的修改.一下方法

  • Android添加glide库报错Error: Failed to resolve: com.android.support:support-annotations:26.0.2的解决

    前言 Glide是 Google推荐的图片加载库,它可以支持来自url,Android资源,文件,Uri中的图片加载,同时还支持gif图片的加载,以及各种图片显示前的bitmap处理(例如:圆角图片,圆形图片,高斯模糊,旋转,灰度等等),缓存处理,请求优先级处理,动画处理,缩略图处理,图片大小自定义等等.可谓是非常的强大. 在Glide的使用方面,它和Picasso的使用方法是比较相似的,并且他们的运行机制也有很多相似的地方,很多博文会把二者进行比较,此文也采取一样的方式,通过比较二者来学习他们

随机推荐