Масштабировать изображение, чтобы заполнить весь ImageView в Android

Я бы хотел масштабировать изображение, чтобы оно занимало весь размер ImageView. Это немного отличается от использования scaleType = fit_center , потому что fit_center оставит полосы вокруг изображения, если соотношение сторон изображения не точно соответствует соотношению сторон ImageView. Вместо этого я хотел бы, чтобы изображение было центрировано и увеличено, чтобы полностью заполнить охватывающий вид, с удалением излишков.

Я могу добиться этого, вычислив собственную матрицу пользовательского изображения во время onCreate ():

final Display display = getWindowManager().getDefaultDisplay();
final float screenWidth = display.getWidth();
final float screenHeight = display.getHeight();
final float imageWidth = splashView.getDrawable().getIntrinsicWidth();
final float imageHeight = splashView.getDrawable().getIntrinsicHeight();
final Matrix splashMatrix = new Matrix();
final float scale = Math.max(screenHeight/imageHeight,screenWidth/imageWidth);
splashMatrix.postScale( scale, scale );
splashView.setImageMatrix(splashMatrix);

Это работает нормально, но похоже, что должно быть что-то попроще. Кто-нибудь знает, как увеличить изображение в ImageView, сохраняя при этом соотношение сторон изображения и полностью заполняя ImageView?

(Примечание: в моем случае мой ImageView занимает весь экран, поэтому я используйте getWindowManager (). getDisplay () , чтобы найти желаемый размер изображения. Вы не можете использовать splashView.getWidth () / getHeight () , потому что представление еще не выложен и не имеет размера)

61
задан Vadim Kotov 19 December 2018 в 14:34
поделиться