Android中动态调整ImageView的宽高比
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的宽高比相关推荐
- android按钮固定尺寸,如何在android中保持按钮的固定宽高比
我正在改进你的XML.我没有测试它,但它应该工作.建议的更改是,而不是将图像设置为背景,将其设置为ImageButtons的src.此外,如果您坚持使用Button,则可以使用其他布局包装每个按钮,并 ...
- OpenGL ES 2.0 for Android教程(五):调整屏幕的宽高比
OpenGL ES 2 第五章:调整屏幕的宽高比 文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ...
- Android中动态初始化布局参数以及ConstraintLayout使用中遇到的坑
Android中动态初始化布局以及ConstraintLayout遇到的一个坑 ConstraintLayout是Android中的一个很强大的布局,它通过控件之间的相对定位,来完成一个layout中 ...
- android radiogroup 添加,如何在android中动态添加textview到radiogroup
大家好, 我们想动态地在radiogroup旁边添加textview.基于服务响应,我们需要在不使用xml的情况下将标签添加到radiogroup. 在某些情况下基于最长无线电如何在android中动 ...
- android程序字体大小,Android如何动态调整应用字体大小详解
前言 为什么要动态设置字体大小?由于项目面对的是中老年客户项目中自带的字体无法满足客户需求. Android应用字体大小默认随系统设置的字体大小而变化,但您可能不希望您的应用字体大小随系统设置变化,想 ...
- android提取图片颜色代码,Android 中动态提取图片中颜色作为主题色
功能需求 一个页面中顶部显示一张图片(图片从网络加载),此时需要根据图片的颜色来动态调整顶部标题栏的背景色. 技术要求 Android 调色板支持库 实现过程 1.添加调色板支持库 dependenc ...
- 在 Web 级集群中动态调整 Pod 资源限制
作者 阿里云容器平台技术专家 王程 阿里云容器平台技术专家 张晓宇(衷源) 引子 不知道大家有没有过这样的经历,当我们拥有了一套 Kubernetes 集群,然后开始部署应用的时候,我们应该给容器分配 ...
- Android中动态生成ListView及SimpleAdapter的使用
SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便 SimpleAdapter(Context context, List<? extends Map< ...
- android字体行距,android中怎么调整字体的间距和行间距
在网页中都是很轻松的就可以调整间距的.在android中,我个人并没有去设置过. 下面就来说说android中的间距问题. 原文:http://blog.csdn.net/fancylovejava/ ...
- Android 中动态的向布局中添加控件
先看一下效果图: 注: 这里使用的是一个自定义的布局文件,你可以向这个布局文件中添加任何控件,它也会动态的依据控件 的大小,动态的排列控件的分布 注:这里使用到的更新界面的方法:http://blog ...
最新文章
- Open***异地机房互连以及负载均衡高可用解决方案
- 在Wireshark中查找数据包
- ANDROID: 超级好用的ADB FORWARD命令
- if else if else语句格式_如何“干掉”if...else
- linux web文件夹权限设置,WEB文件目录权限设置与修改方法
- android 系统倒计时显示时间,Android 依据系统时间整点、半点倒计时
- Shell 学习笔记之运算符
- Hadoop入门(十七)Mapreduce的多表关联程序
- Java,Scala,Guava和Trove集合-它们可以容纳多少数据?
- eclipse debug进入.class_Eclipse使用教程(图文详解)
- 谈话节目APE系列:如何成为技术达人
- 在导出Altium Designer09 PCB BOM清单时,如何把不同层的元器件分开。
- 数字图像处理之引言基础
- 利用ziparchive压缩文件、zip_file解压文件
- opencv-图像阈值
- 程序员的键盘使用指南
- 微信支付 postman_支付宝微信刷脸支付系统搭建服务商平台怎么做
- 使用Foxmail定制自己的邮件模板
- 解决报错:did not contain a valid NDK and couldn‘t be used
- win7系统无法激活问题