使用Picasso组件去下载图片会发现图片宽高会变形不受等比缩放控制,即使设置了图片的 scaleType,可能是对Picasso的api没有用对,
Picasso.with(this.activity)
    .load(AppModel.GetInstance().userAvatarPath)
    .noFade()
    .fit()
    .into(avatar)
 
使用Glide库会更加方便,很好控制下载好的图片宽高等比缩放
 
 
1,布局如下:
 
<ImageView
android:id="@+id/qrcodeImg"
android:layout_width="300dp"
android:layout_height="300dp"
android:scaleType="fitCenter"
android:background="@color/blue"
/>
1>使用了scaleType为fitCenter,默认值也是fitCenter,所以可以不写,保险起见写上,
2>虽然不知道即将下载的远程图片宽高多少,这里还是设置了width,height,不然代码里会报错
3>给ImageView设置了background颜色,是为了清楚的知道图片在下载并显示之后,其实的显示范围和缩放模式是怎样的
 
2,代码如下:
设置了宽度,高度的同时,最后再设置最大高度,最大宽度,不超过屏幕宽度的70%,不超过屏幕高度的60%,代码里setAdjustViewBounds看网上说是为了配合maxwidth,maxheight使用,保持等比,但是实际测试发现去掉这句没什么变化,
这样做法可以避免我一开始的游戏开发里的那种更麻烦的想法:先获取网络图片的真实宽高比,然后再和屏幕宽高比比较,计算合适的宽或者高,再缩放。
保证了等比缩放,同时也保证了图片全部可见,不超出,不剪裁。
 
补充,后来发现漏掉了下面代码中红色那行代码,所以一开始对于layoutParams的设定根本没起作用,这一行必须写,
同时真机测试发现,这行写上之后,最后三行关于max最大值的代码,可以不用写了,那也就可以理解为fitCenter模式下,
图片本身就不会超过其高度和宽度的设定,无需在设置maxwidth和maxheight
Glide.with(getContext()).load(AppModel.GetInstance().getUserQrcodePath()).into(qrcodeImg);

int screenWidth = QMUIDisplayHelper.getScreenWidth(getContext());
int screenHeight = QMUIDisplayHelper.getScreenHeight(getContext());
ViewGroup.LayoutParams layoutParams = (ViewGroup.LayoutParams) qrcodeImg.getLayoutParams(); int maxWidth = (int) (screenWidth * 0.7);
int maxHeight = (int) (screenHeight * 0.6); layoutParams.width = maxWidth;
layoutParams.height = maxHeight;
  qrcodeImg.setLayoutParams(layoutParams);
//qrcodeImg.setAdjustViewBounds(true);

//qrcodeImg.setMaxWidth(maxWidth);
//qrcodeImg.setMaxHeight(maxHeight);
3,真机效果截图:
第一张是高 > 宽的图,第二张是宽  > 高的图
这里可见设置了ImageView的background颜色的好处了,图片的真实范围就是蓝色区域,fitCenter的缩放模式让其在外部大小不变的情况下,内部进行缩放
 

android下载网络图片,设置宽高,等比缩放的更多相关文章

  1. Android之ImageView 设置宽高

    方案一: 设置布局参数 imageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newWidth));

  2. <canvas>设置宽高遇到的问题

    在使用<canvas>元素时必须设置宽度和高度,指定可以绘画的区域大小.但是这里设置宽度和高度的时候有一个小问题. 样例代码: <!DOCTYPE html> <html ...

  3. 关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考

    起初,这个问题和float还有设置宽高之间是没有任何关联的,一开始这是一个关于height和line-height的问题,目的是为了探究一下这两者之间的关系,但是在学习的过程中,我翻之前写的代码,发现 ...

  4. 第4天:JS入门-给div设置宽高背景色

    今天学习了js入门课程,听的不多,做了个小练习,给div设置宽高.背景色.一点点都是进步.核心代码如下: <!DOCTYPE html><html lang="en&quo ...

  5. 在一个没有设置宽高的容器中,为什么设置position:absolute后就可以全屏显示了?

    此场景适用于移动端百分比布局,背景全屏显示. 在一个没有设置宽高的容器中设置背景,想要背景全屏显示,设置bcakground-size:100%;后还需设置position:absolut; 原因: ...

  6. a标签什么时候可以设置宽高

    行内元素(如a标签),在文档流中的时候因为是行内元素所以无法设置宽高:而当设置了绝对定位或者浮动,会生成块框(即变成块元素),所以就可以设置宽高了

  7. android下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  8. android 下载网络图片并缓存

    异步下载网络图片,并提供是否缓存至内存或外部文件的功能 异步加载类AsyncImageLoader public void downloadImage(final String url, final ...

  9. frame方式布局一段文子,设置宽高

    计算一段文字的宽高 /** * 计算一段文字的宽高 * * @param size 这段文字的最大宽高 * @param options NSStringDrawingUsesLineFragment ...

随机推荐

  1. centos 7 源代码 mysql-5.7.2 安装

    CENTOS MYSQL 5.7 下载MySQL 5.7 https://dev.mysql.com/downloads/mysql/5.7.html#downloads cd /usr/local/ ...

  2. Ubuntu .tar.xz文件解压缩命令

    1.解压缩.tar.xz文件 这是两层压缩,外面是xz压缩方式,里层是tar压缩 所以可以分两步实现解压 $ xz -d filename.tar.xz $ tar -xvf filename.tar ...

  3. 【idea】idea 2018.2 for mac永久破解激活方法(亲测2099)

    1. 下载安装idea: 2. 下载激活Jar包 链接:https://pan.baidu.com/s/1NaxYrDNi2eW66epjmk10dg 密码:aec5 3. 在访达中新建/Librar ...

  4. 08 saltstack生产实例-apahce+php+redis

    1.apache+php 前几章的LAMP:https://www.cnblogs.com/venicid/p/11276232.html#_label2 Php放在apache 1.目录结构 2.p ...

  5. 浅析flex 布局

    Flex基本概念: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end: ...

  6. uniapp上传图片转base64码

    uni.chooseImage({ count: 9, success: res => { this.imageList = this.imageList.concat(res.tempFile ...

  7. 一个3D正方体

    一个小例子,3D的正方体 <!DOCTYPE html> <html oncontextmenu=self.event.returnValue=false onselectstart ...

  8. cx_freeze multiprocessing 打包后反复重启

    写了给flask程序,此外还需要用multiprocessing 启动一个守护进程. 不打包一切正常,用cx_freeze打包后,发现flask反复重启.任务管理器里这个GUI窗口的进程数不断增加. ...

  9. 【BZOJ4176】 Lucas的数论

    Description 去年的Lucas非常喜欢数论题,但是一年以后的Lucas却不那么喜欢了. 在整理以前的试题时,发现了这样一道题目“求Sigma(f(i)),其中1<=i<=N”,其 ...

  10. rabbitmq 的安装配置使用

    前言: 对于消息队列中间件: #redis: 功能比较全,但是如果突然停止运行或断电会造成数据丢失 #RabbitMQ:功能比较齐全.稳定.便于安装,在生产环境来说是首选的 1.下载软件[下载较慢,请 ...