1

我只是从手机图库中获得了一张图片,其中大多数是纵向的,即(高度>宽度)或横向(宽度>高度)

我想以正方形显示每张照片,每张图像都比我要放入的图像视图大,没关系,我希望图像被裁剪和居中,

我一直在使用 imageview scaleType

FitXY

它给了我我想要的东西,一个正方形,但它不保持纵横比,所以图像看起来失真。

所以我用

centerCrop

保持纵横比,但图像视图不再是正方形(由于保持纵横比)

我想我想要的是centerCrop + fitXY,即我想要一个保持纵横比的方形图像

我怎样才能做到这一点?

4

1 回答 1

0

您可以创建自定义ImageView,它将使用图片高度/宽度作为它自己的并调整宽度/高度以保持纵横比。

像这样覆盖onMeasure

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    Drawable d = getDrawable();

    if (d != null) {
        // ceil not round - avoid thin vertical gaps along the left/right edges
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = (int) Math
                .ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth());
        setMeasuredDimension(width, height);
    } else {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

带有此 onMeasure 的 ImageView 会将图片拉伸到其宽度并调整其高度以保持图像的纵横比。您还可以设置与宽度相同的高度以获得方形图像。

可能与:Android ImageView 调整父级高度和拟合宽度有关

于 2013-06-16T08:00:28.127 回答