使用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. Centos7查不出ip地址

    今天遇到了这个问题,解决后记录一下: //输入查询命令 ifconfig或者ip addr 如图,是显示不出信息的 找到ens33的配置文件,输入命令 vi /etc/sysconfig/networ ...

  2. Action向视图传值的6种方式(转)

    在使用ASP.NET MVC进行项目开发时,经常会碰到从Action向视图传值的问题,今天我就把我所知道的方式总结了一下,分成了以下六种: 1.使用ViewData进行传值 在Action中,有如下代 ...

  3. tftp client命令示例

    tftp 192.168.1.1 -c put myfile theirfile tftp 192.168.1.1 -m binary -c put myfile theirfile The tftp ...

  4. SQL语句复习【专题二】

    SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数  ...

  5. Redis Sentinel机制与用法说明

    本文来自 https://www.cnblogs.com/zhoujinyi/p/5569462.html 概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Red ...

  6. shell常用分隔符及管道的用法

    1.命令1;命令2;命令3;.... 代码顺序执行 2.&&连接两条命令:命令1&&命令2&&命令3... 短路执行 3.||连接两条命令:命令1||命 ...

  7. 7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)

    7.2 jmu-Java-06异常-02-使用异常机制处理异常输入 (5分)   使用异常处理输入机制,让程序变得更健壮. main方法: 输入n,创建大小为n的int数组. 输入n个整数,放入数组. ...

  8. php类相关知识----抽象类

    <?php //抽象类存在的目的是被继承,而不是用来被实现 abstract class wenwajiao { //抽象类中一定要有抽象方法,而且一定要被实现 abstract public ...

  9. 常见的SQL编写和优化

    目录 常见SQL编写和优化 常见的SQL优化方式 常见SQL编写和优化 常见的SQL优化方式 对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by 涉及的列上建立索引. 应尽量 ...

  10. java mybaits 调用存储过程

    @Override public BaseResultMessage saveOrderConfirm(String billNo) { BaseResultMessage rm = Utils.re ...