如何为 ImageView 设置最小可缩放值?

how do I set a minimum scalable value for a ImageView?

假设我的可绘制文件夹中有一张分辨率为 400x400 的图像 'A',我将 ImageView 源设置为 A,此 ImageView 位于线性布局或卡片布局中。

我希望图像根据设备进行缩放,对于 4 英寸设备,我希望它是 120dp X 120dp,但我希望它根据显示器的尺寸缩放到更大的像素

首先,您需要获取设备的分辨率,如下所示:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int width = displayMetrics.widthPixels;
int height = displayMetrics.heightPixels;

然后根据宽高,可以通过一定的语句设置ImageView.SetWidth(...)/Height/ScaleType

通过使用约束布局并将图像宽度和高度设置为 0dp 使其根据图像源大小进行缩放来解决此问题。

在 ImageView centerInside 中使用 ScaleType。

您可以通过保持 Aspect Ratio.Aspect Ratio.

根据屏幕尺寸制作新的 Bitmap

假设您的图片尺寸为 400x300(宽x高)

而您的预期 ImageView 大小是 200x400

并且你想根据 ImageView 的宽度来适应它然后你将使用下面的公式计算新的 HeightWidth 并调整新的 Bitmap.[= 的大小21=]

Aspect Ratio = Height / Width (if we taken new Width)

Aspect Ratio = Width / Height (If we take new Height)

AR= 300/400 = 0.75

New Height = NewWidth * AR;
NewHeight = 200 * 0.75;
NewHeight = 150 ;

因此您可以通过采用上述高度和宽度来调整位图的大小。

Online Image Aspect Ratio Calculator

使用以下方法调整位图大小:

public static Bitmap scaleBitmap(Bitmap bitmap, int wantedWidth, int wantedHeight) {
Bitmap output = Bitmap.createBitmap(wantedWidth, wantedHeight, Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Matrix m = new Matrix();
m.setScale((float) wantedWidth / bitmap.getWidth(), (float) wantedHeight / bitmap.getHeight());
canvas.drawBitmap(bitmap, m, new Paint());
return output;
}