diff --git a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt index eac7db522..99de2729c 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/view2/divs/BaseDivViewExtensions.kt @@ -546,6 +546,7 @@ internal fun DivImageScale.toImageScale(): AspectImageView.Scale { DivImageScale.NO_SCALE -> AspectImageView.Scale.NO_SCALE DivImageScale.FIT -> AspectImageView.Scale.FIT DivImageScale.FILL -> AspectImageView.Scale.FILL + DivImageScale.STRETCH -> AspectImageView.Scale.STRETCH } } diff --git a/client/android/div/src/main/java/com/yandex/div/internal/widget/AspectImageView.kt b/client/android/div/src/main/java/com/yandex/div/internal/widget/AspectImageView.kt index 56f5aa0e6..01219b142 100644 --- a/client/android/div/src/main/java/com/yandex/div/internal/widget/AspectImageView.kt +++ b/client/android/div/src/main/java/com/yandex/div/internal/widget/AspectImageView.kt @@ -129,25 +129,30 @@ open class AspectImageView @JvmOverloads constructor( val imageHeight = drawable.intrinsicHeight.toFloat() val absoluteGravity = GravityCompat.getAbsoluteGravity(gravity, ViewCompat.getLayoutDirection(this)) - val scale = when (imageScale) { + val scaleX = when (imageScale) { Scale.NO_SCALE -> 1.0f Scale.FIT -> min(availableWidth / imageWidth, availableHeight / imageHeight) Scale.FILL -> max(availableWidth / imageWidth, availableHeight / imageHeight) + Scale.STRETCH -> availableWidth / imageWidth + } + val scaleY = when (imageScale) { + Scale.STRETCH -> availableHeight / imageHeight + else -> scaleX } val translationX = when (absoluteGravity and Gravity.HORIZONTAL_GRAVITY_MASK) { - Gravity.CENTER_HORIZONTAL -> (availableWidth - imageWidth * scale) / 2 - Gravity.RIGHT -> availableWidth - imageWidth * scale + Gravity.CENTER_HORIZONTAL -> (availableWidth - imageWidth * scaleX) / 2 + Gravity.RIGHT -> availableWidth - imageWidth * scaleX else -> 0.0f } val translationY = when (absoluteGravity and Gravity.VERTICAL_GRAVITY_MASK) { - Gravity.CENTER_VERTICAL -> (availableHeight - imageHeight * scale) / 2 - Gravity.BOTTOM -> availableHeight - imageHeight * scale + Gravity.CENTER_VERTICAL -> (availableHeight - imageHeight * scaleY) / 2 + Gravity.BOTTOM -> availableHeight - imageHeight * scaleY else -> 0.0f } transformMatrix.apply { reset() - postScale(scale, scale) + postScale(scaleX, scaleY) postTranslate(translationX, translationY) } imageMatrix = transformMatrix @@ -156,6 +161,7 @@ open class AspectImageView @JvmOverloads constructor( enum class Scale { NO_SCALE, FIT, - FILL + FILL, + STRETCH } } diff --git a/schema/div-image-scale.json b/schema/div-image-scale.json index 0d62f80c5..97b250828 100644 --- a/schema/div-image-scale.json +++ b/schema/div-image-scale.json @@ -3,6 +3,7 @@ "enum": [ "fill", "no_scale", - "fit" + "fit", + "stretch" ] }