失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 让ImageView尺寸适应图片比例和屏幕

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

时间:2022-02-07 20:41:06

相关推荐

让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();//屏幕宽高比,一定要先把其中一个转为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="/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尺寸适应图片比例和屏幕》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。