是否经常会遇到这种情况:我怕们需要一个ImageView,一般情况下既想让它宽度适应屏幕,又想让它高度适应图片。但是图片比例和屏幕比例没有关联,我们给ImageView设置尺寸,要不就是充满屏幕,要不就是包裹内容,固定尺寸无法应对图片比例不确定的情况。所以我们需要写一个工具方法,来调整控件尺寸,达到既适应图片,又适应屏幕的目的。

看代码:工具类

public class ImageViewUtil {public static void matchAll(Context context, ImageView imageView) {int width, height;//ImageView调整后的宽高//获取屏幕宽高WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics metrics = new DisplayMetrics();manager.getDefaultDisplay().getMetrics(metrics);int sWidth = metrics.widthPixels;int sHeight = metrics.heightPixels;//获取图片宽高Drawable drawable = imageView.getDrawable();int dWidth = drawable.getIntrinsicWidth();int dHeight = drawable.getIntrinsicHeight();//屏幕宽高比,一定要先把其中一个转为floatfloat sScale = (float) sWidth / sHeight;//图片宽高比float dScale = (float) dWidth / dHeight;/*缩放比如果sScale>dScale,表示在高相等的情况下,控屏幕比较宽,这时候要适应高度,缩放比就是两则的高之比,图片宽度用缩放比计算如果sScale<dScale,表示在高相等的情况下,图片比较宽,这时候要适应宽度,缩放比就是两则的宽之比,图片高度用缩放比计算*/float scale = 1.0f;if (sScale > dScale) {scale = (float) dHeight / sHeight;height = sHeight;//图片高度就是屏幕高度width = (int) (dWidth * scale);//按照缩放比算出图片缩放后的宽度} else if (sScale < dScale) {scale = (float) dWidth / sWidth;width = sWidth;height = (int) (dHeight / scale);//这里用除} else {//最后两者刚好比例相同,其实可以不用写,刚好充满width = sWidth;height = sHeight;}//重设ImageView宽高RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);imageView.setLayoutParams(params);//这样就获得了一个既适应屏幕有适应内部图片的ImageView,不用再纠结该给ImageView设定什么尺寸合适了}
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:background="#b26868"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/img_container"android:layout_width="wrap_content"android:layout_height="wrap_content"android:scaleType="fitXY"android:layout_centerInParent="true"android:src="@drawable/xiongmao" />
</RelativeLayout>

主程序调用:

public class MainActivity extends AppCompatActivity {private ImageView mImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {mImageView = (ImageView) findViewById(R.id.img_container);//mImageView.setImageResource(R.drawable.fengjing_1);ImageViewUtil.matchAll(this, mImageView);}}

运行情况:

布局效果

使用工具调整之后

动态改变图片之后

让ImageView尺寸适应图片比例和屏幕相关推荐

  1. android 横向铺满,Android开发全程记录(八)——设置ImageView显示的图片铺满全屏(适应魅族等不常见屏幕比例)...

    为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,如果定高的话,两边可能会出现空白.魅族手机就会有这种情况,在其他手机里显示正常,在魅族手机里显示,图片左右两边会出现空白,为解决这一问 ...

  2. vue图片超出屏幕尺寸自动适应图片比例缩放

    vue图片超出屏幕尺寸自动适应图片比例缩放 <div><el-button class="blue-btn"@click="open"> ...

  3. 怎么让图片铺满手机屏幕_设置ImageView显示的图片铺满全屏

    为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,如果定高的话,两边可能会出现空白.魅族手机就会有这种情况,在其他手机里显示正常,在魅族手机里显示,图片左右两边会出现空白,为解决这一问 ...

  4. Android ImageView的scaleType(图片比例类型)属性与adjustViewBounds(调整视图边界)属性

    本文转载自[Android ImageView的scaleType(图片比例类型)属性与adjustViewBounds(调整视图边界)属性]并做了排版的修改(http://www.cnblogs.c ...

  5. 微信小程序,画布中,根据需要展示的图片比例,获取能截取原图中的最大图片尺寸,并且不变形展示

    在微信小程序中,想要做一个分享海报,就需要用到画布,在画布上绘制图片时就会遇到图片变形的情况,下面我会给出我的解决办法. 先画个图片意思意思下: 1. 先根据传入图片地址获取原图片的尺寸: // 获取 ...

  6. 微信小程序之一本地图片处理--按屏幕尺寸插入图片

    个人感觉微信小程序的IDE用起来有时候不太方便,可能是之前用惯了Eclipse的原因吧.微信小程序的开发工具不支持直接将文件拷贝到目录下,所以首先要将图片文件导入到本地目录下,然后编写工具类获取屏幕的 ...

  7. 微信小程序本地图片处理--按屏幕尺寸插入图片

    个人感觉微信小程序的IDE用起来有时候不太方便,可能是之前用惯了Eclipse的原因吧.微信小程序的开发工具不支持直接将文件拷贝到目录下,所以首先要将图片文件导入到本地目录下,然后编写工具类获取屏幕的 ...

  8. C#修改图片尺寸,不改变原有图片比例

    C#使用BitMap修改图片尺寸,修改图片大小,不改变原有图片比例 修改后图片  代码 public static void image(){System.Drawing.Image img = Sy ...

  9. android图片适配(图片大小与屏幕密度)Bitmap占用内存计算

    目录 概述 dpi 计算公式 dp与px换算公式: android系统适配图片规律: 同名图片放在不同密度的文件夹下,系统选择图片规律 同一张图片,放在不同密度的Drawable文件夹下,ImageV ...

最新文章

  1. Spring Cloud Alibaba 之 服务治理:Nacos 如何实现微服务服务治理
  2. Reporting service个人使用经验
  3. oracle入门知识实施,新手必须了解的oracle入门知识
  4. 安卓8.1 字体 ——现在6.0,7.0,8.0都可以体验
  5. journalctl -xefu kubelet查看kubelet日志
  6. 研究发现视频会议增加员工压力、 谷歌地球升级4D交互体验、Apple新品发布、网飞用户增长缓慢等|Decode the Week
  7. 1090 Highest Price in Supply Chain (25)(25 分)
  8. leetcode647. 回文子串(动态规划)
  9. 从printf谈可变参数函数的实现
  10. 02-合并frame
  11. 大数据生态圈常用组件(二):概括介绍、功能特性、适用场景
  12. vimb java_vim 中更好的編輯 java 文件.
  13. 提高python 程序运行速度_3个Python函数帮程序员们避免编写循环,提高运行速度...
  14. python catia 接口_CATIA二次开发工程制图接口:
  15. 给大家贴一点好东东 喜欢电影的朋友请看
  16. 爱情树代码python_送男朋友礼物送什么比较有意义?
  17. python金融编程入门_python金融实务从入门到精通完整版
  18. 写文案可以用什么软件?用来写文案的便签应用软件
  19. Josh 的学习笔记之数字通信(Part 2——格式化和基带调制)
  20. 两款Windows系统优化工具

热门文章

  1. zcum(浙江中医药)1919: kirito's 星爆气流斩
  2. Max-Margin Regularization for Chamfer Matching
  3. AI一分钟 | 苹果在自动驾驶领域苦追谷歌,测试车增至27辆;比尔盖茨:AI代替人类工作是件好事
  4. uni-app 遮罩层事件穿透解决办法catchtouchmove
  5. 【附源码】计算机毕业设计java装修信息分享管理系统设计与实现
  6. Excel打开时提示“因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。”最快的解决办法
  7. Angular2属性绑定
  8. LiveGBS国标流媒体-摄像头网络直播方案部署问题
  9. 路由器级联方式(二级路由为例)
  10. HAL库版STM32双轮自平衡车(五) ———— 调参