Java scaleType=中心裁剪

Java scaleType=中心裁剪,java,android,xml,imageview,crop,Java,Android,Xml,Imageview,Crop,我的应用程序中有一个图库。我的照片来自互联网,因此它们是动态添加的。我的画廊并没有把它们都裁剪成一个完美的正方形。我想这样做只是为了让我的画廊看起来更好。我在XML中尝试了这一点 ImageView android:id="@+id/phone" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="15d

我的应用程序中有一个图库。我的照片来自互联网,因此它们是动态添加的。我的画廊并没有把它们都裁剪成一个完美的正方形。我想这样做只是为了让我的画廊看起来更好。我在XML中尝试了这一点

 ImageView
        android:id="@+id/phone"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="15dp"
        android:adjustViewBounds="true"
        android:scaleType="centerCrop"/>

但是,因为我是动态添加图像的,而不是从xml中的
src
,所以这不起作用。有人知道怎么用另一种方法吗?我找不到任何关于动态添加时如何执行的内容。提前谢谢

如果需要动态缩放图像,可以使用位图的缩放位图方法以编程方式指定缩放图像的大小。大概是这样的:

位图缩放位图=位图.createScaledBitmap(unscaledBitmap,wantedWidth,wantedHeight,true)

有关缩放的详细信息,请参见以下链接:


如果需要动态缩放图像,可以使用位图的缩放位图方法以编程方式指定缩放图像的大小。大概是这样的:

位图缩放位图=位图.createScaledBitmap(unscaledBitmap,wantedWidth,wantedHeight,true)

有关缩放的详细信息,请参见以下链接:


您是否在
网格视图中布局图像?如果是这样的话,下面的方法就行了。(如果没有,类似的东西可能会起作用,但我没有测试过)

首先,强制视图为正方形实际上有点棘手,因为宽度和高度是分开测量的。你可以参考一些想法。最简单的方法(我认为)是创建一个新视图,继承自
ImageView
,但覆盖
onMeasure()
,例如

public class SquareImageView {

    // add usual constructors here

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // this will change the height to match the measured width
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
}
然后更改布局xml以创建
SquareImageView
的实例,而不是
ImageView
。我认为您的其他属性都可以,特别是
android:scaleType=“centerCrop”
将确保图像填充整个正方形


在此之后,您可以将图像从任何来源下载到
位图
实例中,然后调用
imageView.setImageBitmap(Bitmap)
以显示裁剪成完美正方形的图像。就这样

您是否在
网格视图中布局图像?如果是这样的话,下面的方法就行了。(如果没有,类似的东西可能会起作用,但我没有测试过)

首先,强制视图为正方形实际上有点棘手,因为宽度和高度是分开测量的。你可以参考一些想法。最简单的方法(我认为)是创建一个新视图,继承自
ImageView
,但覆盖
onMeasure()
,例如

public class SquareImageView {

    // add usual constructors here

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // this will change the height to match the measured width
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }
}
然后更改布局xml以创建
SquareImageView
的实例,而不是
ImageView
。我认为您的其他属性都可以,特别是
android:scaleType=“centerCrop”
将确保图像填充整个正方形


在此之后,您可以将图像从任何来源下载到
位图
实例中,然后调用
imageView.setImageBitmap(Bitmap)
以显示裁剪成完美正方形的图像。就这样

如果我没有弄错,我们可以用

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

如果我没有弄错,我们可以用

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

这扭曲了图像,不完全是我想要的,但它会做的。这扭曲了图像,不完全是我想要的,但它会做的。