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

原创 2016年12月24日 18:56:16

是否经常会遇到这种情况:我怕们需要一个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,表示在高相等的情况下,图片比较宽,这时候要适应宽度,缩放比就是两则的宽之比,图片高度用缩放比计算
         */
        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">

    <ImageView
        android: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;

    @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);
    }

}

运行情况:

布局效果


使用工具调整之后


动态改变图片之后


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【ImageView】图片自适应及android:scaleType属性

ImageView的属性 android:scaleType是ImageView的属性 等同于Java代码的 ImageView.setScaleType(ImageView.ScaleType)...

Android ImageView自适应属性

Android ImageView图片自适应项目中使用Picasso加载图片,结果发现后台给的图片太小,无法填充ImageView,在Picasso加载图片中加上fit()后图片直接不显示了,便想到前...
  • woodgp
  • woodgp
  • 2016年07月26日 17:46
  • 3273

设置ImageView显示的图片铺满全屏

转载自:http://m.blog.csdn.net/blog/wjwj1203/32334459         为适应不同屏幕的手机,ImageView显示的图片可能不铺满屏幕,...

Android imageView图片按比例缩放

点击打开链接 原作者 android:scaleType可控制图片的缩放方式,示例代码如下: ...
  • hhbgk
  • hhbgk
  • 2012年10月23日 10:25
  • 90985

如何设置imageView的高和宽?

原问题来自于CSDN问答频道,更多解决方案见:http://ask.csdn.net/questions/1452   原问题描述:我想在activity中改变图片视图的宽高属性,但是我用了一个方...
  • CSDN_Ask
  • CSDN_Ask
  • 2013年02月25日 16:00
  • 10909

android自定义适配屏幕的ImageView

package org.angryfun.view; import android.content.Context; import android.graphics.Bitmap; import ...

Android 设置ImageView宽度固定,其高度按比例缩放适应

今天和项目经理对喷了一下,他说在应用的列表数据中的图片应该宽度固定,高度按比例缩放自适应,我说,那岂不是很丑!直接让运营那边把图片处理成固定宽高比不就好了,省的我客户端麻烦了。 这家伙不同意,为毛呢,...

Android - 设置ImageView为全屏显示

设置ImageView为全屏显示本文地址: http://blog.csdn.net/caroline_wendyImageView默认会适应屏幕大小, 如果想使用全屏填充, 则需要使用:androi...

Android 使用Picasso加载网络图片等比例缩放

1、先获取网络或本地图片的宽高 2、获取需要的目标宽 3、按比例得到目标的高度 4、按照目标的宽高创建新图...

Android图片加载框架Picasso最全使用教程 三

前面我们对Picasso的用法有了一定得了解,下面就分析一下一些特殊情况下,Picasso的用法...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让ImageView尺寸适应图片比例和屏幕
举报原因:
原因补充:

(最多只允许输入30个字)