知方号

知方号

让ImageView尺寸适应图片比例和屏幕<如何让图片适应电脑屏幕大小>

让ImageView尺寸适应图片比例和屏幕

是否经常会遇到这种情况:我怕们需要一个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(); //屏幕宽高比,一定要先把其中一个转为float float sScale = (float) sWidth / sHeight; //图片宽高比 float dScale = (float) dWidth / dHeight; /* 缩放比 如果sScale>dScale,表示在高相等的情况下,控屏幕比较宽,这时候要适应高度,缩放比就是两则的高之比,图片宽度用缩放比计算 如果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设定什么尺寸合适了 }}

布局文件

主程序调用:

public class MainActivity extends AppCompatActivity { private ImageView mImageView; @Override protected 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); }} 运行情况:

布局效果

使用工具调整之后

动态改变图片之后

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。