如何设置ImageView的缩放类型,使图像应为中心裁剪,上部始终可见

时间:2016-10-13 10:45:36

标签: android imageview

在我的项目中,新闻Feed中有多个图片。我希望ImageView中的图像应该以一种应该是中心裁剪的方式显示,并且图像的上半部分始终可见。

您可以参考下面的屏幕截图,其中在image1中使用中心裁剪显示图像,图像的上半部分不可见:

enter image description here

在中心裁剪中显示图像的图像2以及图像的上半部分也是可见的:

enter image description here

我想要ImageView的第二种图像类型。 如果有人可以帮助我,请提供解决方案。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

是的,他们真的需要一种比例类型的“适合”或“作物”,然后是引力:“中心”,“顶部”,“开始”等。但是现在我们必须这样做:

首先,将您的ImageView设置为按矩阵缩放:

    <ImageView
        ...
        android:scaleType="matrix"/>

然后你必须在代码中执行:

    private Matrix mMatrix = new Matrix();

...

    final ImageView imageView = (ImageView) findViewById(R.id.imageView);

    // Using the view tree observer to make sure the ImageView 
    // is laid out so we have a valid width and height.
    // You don't have to do this if you know your ImageView is already
    // laid out when the image bitmap is fetched.
    imageView.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            // I had a preset bitmap on the view so I used this
            // Just get the actual dimensions of the bitmap
            float iw = imageView.getDrawable().getIntrinsicWidth();
            float ih = imageView.getDrawable().getIntrinsicHeight();

            // Get the dimensions of the view
            float vw = imageView.getWidth();
            float vh = imageView.getHeight();

            // Compute the scale factors
            float scaleW = vw / iw;
            float scaleH = vh / ih;

            // For a crop, we take the largest scale factor
            float scale = Math.max(scaleW, scaleH);

            // First, center the image horizontally
            mMatrix.setTranslate((vw - iw) / 2, 0);

            // Then scale the image from horizontal center & vertical top
            mMatrix.postScale(scale, scale, vw / 2, 0);

            imageView.setImageMatrix(mMatrix);
        }
    });