mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
add stretch to image scale type
This commit is contained in:
+1
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"enum": [
|
||||
"fill",
|
||||
"no_scale",
|
||||
"fit"
|
||||
"fit",
|
||||
"stretch"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user