У меня есть два изображения, которые не всегда полностью вписываются в экран. Поэтому я хочу их обрезать (например, CENTER_CROP), но так, чтобы нижняя область изображения всегда была видимой. Оба изображения заполняют всю ширину экрана и каждую 1/2 высоты экрана.ImageView Scaling BOTTOM_CROP
Я нашел подобное решение здесь: ImageView scaling TOP_CROP Принятое решение работает отлично, но я не могу понять, как изменить матрицу, чтобы сделать его BOTTOM_CROP вместо этого.
Рабочий код для TOP_CROP:
setScaleType(ScaleType.MATRIX);
Matrix matrix = getImageMatrix();
float scaleFactor = (getWidth() - Data.getImgPadding(c))/(float) getDrawable().getIntrinsicWidth();
matrix.setScale(scaleFactor, scaleFactor, 0, 0);
setImageMatrix(matrix);
Примечание: обивка справа устанавливается программно, поэтому она должна быть включена в расчет (значение считывается Data.getImgPadding (с)).
Для BOTTOM_CROP я думал, что я хотел бы использовать:
matrix.setScale(scaleFactor, scaleFactor, 0, getHeight());
Но это на самом деле не работает, для первого изображения в нижней части отображается более или менее правильно, но есть какая-то маржа ниже него - нижняя граница изображения должна быть точно в нижней части рамки ImageView. Я предполагаю, что я должен каким-то образом использовать прокладку, но я не знаю, как измерить «новую» высоту изображения после того, как установлено значение горизонтального заполнения.
Однако большая проблема заключается в том, что (по какой-либо причине), когда я устанавливаю значение py в setScale(), второй ImageView внезапно пуст ... оба представления используют один и тот же макет xml, но это не может быть причиной так как исходный код отлично работает на обоих.