#android #imageview #aspect-ratio #scaletype
Вопрос:
У меня есть изображение на весь экран. Я получаю изображение с сервера, и оно может быть любого размера. Мне нужно отобразить это изображение во весь экран.
Однако на некоторых устройствах часть изображения обрезается.Это было связано с тем фактом, что я установил тип масштаба для своего центра обработки изображений. Соответственно, для того, чтобы все изображение отображалось на экране, а не было обрезано, я изменил тип масштаба на fitXY. Теперь ни одна часть изображения не обрезается, но fitXY не сохраняет соотношение сторон изображения, и в результате некоторые детали на изображении растягиваются.
Можно ли сохранить соотношение сторон изображения без его обрезки? Пожалуйста, помогите мне.
Я также попытался создать пользовательский ImageView, чтобы сохранить соотношение сторон, и установить scaleType для fixXY, но это не работает, изображение по-прежнему выглядит растянутым. Вот мой код:
class ScaleImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : AppCompatImageView(context, attrs, defStyle) {
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) = try {
val drawable = drawable
if (drawable == null) {
setMeasuredDimension(0, 0)
} else {
val measuredWidth = MeasureSpec.getSize(widthMeasureSpec)
val measuredHeight = MeasureSpec.getSize(heightMeasureSpec)
if (measuredHeight == 0 amp;amp; measuredWidth == 0) {
setMeasuredDimension(measuredWidth, measuredHeight)
} else if (measuredHeight == 0) {
val height = measuredWidth * drawable.intrinsicHeight / drawable.intrinsicWidth
setMeasuredDimension(measuredWidth, height)
} else if (measuredWidth == 0) {
val width = measuredHeight * drawable.intrinsicWidth / drawable.intrinsicHeight
setMeasuredDimension(width, measuredHeight)
} else {
setMeasuredDimension(measuredWidth, measuredHeight)
}
}
} catch (e: Exception) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
}
}
Я тоже пробовал этот способ:
<ImageView
android:scaleType="centerCrop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true" />
Но в этом случае изображение обрезается сверху и снизу(