1.原理

我在实践中,是调整一个ListView中的Item里的ImageView元素的宽高比,类似微信公众号的消息内容,item有固定padding,然后ImageView宽度撑满屏幕,高度由一定比例决定。

在写好布局文件后,首先拿到整个屏幕的宽度,然后减去左右两侧的padding所占的宽度,得到的结果就是ImageView应该设置的宽度,再由一定比例计算出高度,最后以ImageView.setLayoutParams()完成宽高的设定。

2.代码

//布局文件

<LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="vertical"android:padding="10dp"><ImageViewandroid:id="@+id/item_notice_iv"android:layout_width="fill_parent"android:layout_height="wrap_content"android:scaleType="fitXY" /></LinearLayout>

//初始化

ImageView mImageView = (ImageView)       findViewById(R.id.item_notice_center_iv);
mImageView.setAdjustViewBounds(true);

//获取屏幕宽度

WindowManager m = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
m.getDefaultDisplay().getMetrics(outMetrics);

//计算宽高,我需要的图片尺寸是280*136

int width = outMetrics.widthPixels - DensityTool.dp2px(this, 10f) * 2; //乘以2是因为左右两侧的宽度
int height = (int) (width / 280f * 136); //280*136

//设置图片参数

ViewGroup.LayoutParams layoutParams = mImageView.getLayoutParams();
layoutParams.width = width;
layoutParams.height = height;
mImageView.setLayoutParams(layoutParams);

3.dp与px转化

public class DensityTool {//根据手机的分辨率从 dp 的单位 转成为 px(像素)public static float dp2px(Resources resources, float dpValue) {final float scale = resources.getDisplayMetrics().density;return (dpValue * scale + 0.5f);}//根据手机的分辨率从 dp 的单位 转成为 px(像素)public static int dp2px(Context context, float dpValue) {float scale = context.getResources().getDisplayMetrics().density;return (int)(dpValue * scale + 0.5f);}//根据手机的分辨率从 px(像素) 的单位 转成为 dppublic static float px2dp(Resources resources, float pxValue) {final float scale = resources.getDisplayMetrics().density;return (pxValue / scale + 0.5f);}//获取屏幕dpipublic static int getDpi(Context context) {return context.getResources().getDisplayMetrics().densityDpi;}
}

其他参考

1、android中使用DisplayMetrics获取屏幕参数 
2、ImageView.ScaleType设置图解

Android中动态调整ImageView的宽高比相关推荐

  1. android按钮固定尺寸,如何在android中保持按钮的固定宽高比

    我正在改进你的XML.我没有测试它,但它应该工作.建议的更改是,而不是将图像设置为背景,将其设置为ImageButtons的src.此外,如果您坚持使用Button,则可以使用其他布局包装每个按钮,并 ...

  2. OpenGL ES 2.0 for Android教程(五):调整屏幕的宽高比

    OpenGL ES 2 第五章:调整屏幕的宽高比 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ...

  3. Android中动态初始化布局参数以及ConstraintLayout使用中遇到的坑

    Android中动态初始化布局以及ConstraintLayout遇到的一个坑 ConstraintLayout是Android中的一个很强大的布局,它通过控件之间的相对定位,来完成一个layout中 ...

  4. android radiogroup 添加,如何在android中动态添加textview到radiogroup

    大家好, 我们想动态地在radiogroup旁边添加textview.基于服务响应,我们需要在不使用xml的情况下将标签添加到radiogroup. 在某些情况下基于最长无线电如何在android中动 ...

  5. android程序字体大小,Android如何动态调整应用字体大小详解

    前言 为什么要动态设置字体大小?由于项目面对的是中老年客户项目中自带的字体无法满足客户需求. Android应用字体大小默认随系统设置的字体大小而变化,但您可能不希望您的应用字体大小随系统设置变化,想 ...

  6. android提取图片颜色代码,Android 中动态提取图片中颜色作为主题色

    功能需求 一个页面中顶部显示一张图片(图片从网络加载),此时需要根据图片的颜色来动态调整顶部标题栏的背景色. 技术要求 Android 调色板支持库 实现过程 1.添加调色板支持库 dependenc ...

  7. 在 Web 级集群中动态调整 Pod 资源限制

    作者 阿里云容器平台技术专家 王程 阿里云容器平台技术专家 张晓宇(衷源) 引子 不知道大家有没有过这样的经历,当我们拥有了一套 Kubernetes 集群,然后开始部署应用的时候,我们应该给容器分配 ...

  8. Android中动态生成ListView及SimpleAdapter的使用

    SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便 SimpleAdapter(Context context, List<? extends Map< ...

  9. android字体行距,android中怎么调整字体的间距和行间距

    在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...

  10. Android 中动态的向布局中添加控件

    先看一下效果图: 注: 这里使用的是一个自定义的布局文件,你可以向这个布局文件中添加任何控件,它也会动态的依据控件 的大小,动态的排列控件的分布 注:这里使用到的更新界面的方法:http://blog ...

最新文章

  1. Open***异地机房互连以及负载均衡高可用解决方案
  2. 在Wireshark中查找数据包
  3. ANDROID: 超级好用的ADB FORWARD命令
  4. if else if else语句格式_如何“干掉”if...else
  5. linux web文件夹权限设置,WEB文件目录权限设置与修改方法
  6. android 系统倒计时显示时间,Android 依据系统时间整点、半点倒计时
  7. Shell 学习笔记之运算符
  8. Hadoop入门(十七)Mapreduce的多表关联程序
  9. Java,Scala,Guava和Trove集合-它们可以容纳多少数据?
  10. eclipse debug进入.class_Eclipse使用教程(图文详解)
  11. 谈话节目APE系列:如何成为技术达人
  12. 在导出Altium Designer09 PCB BOM清单时,如何把不同层的元器件分开。
  13. 数字图像处理之引言基础
  14. 利用ziparchive压缩文件、zip_file解压文件
  15. opencv-图像阈值
  16. 程序员的键盘使用指南
  17. 微信支付 postman_支付宝微信刷脸支付系统搭建服务商平台怎么做
  18. 使用Foxmail定制自己的邮件模板
  19. 解决报错:did not contain a valid NDK and couldn‘t be used
  20. win7系统无法激活问题

热门文章

  1. 鼠标右键新建没有.txt文本文档
  2. 苹果6s微信网络未连接服务器,微信网络连接不可用怎么解决?苹果手机微信网络连接不可用?...
  3. 浅谈微信公众平台和微信开放平台的区别
  4. 程序员价值观和网络复杂性-网络不可达排查过程
  5. 浪潮服务器装显卡和显卡驱动
  6. 设置notepad++背景护眼色
  7. Java使用 PDFBox 从 pdf 中提取图像
  8. 工期计算机在线,工期日历计算器
  9. 新能源汽车技术与市场
  10. Java热搜问题大整理