Skip to content

Instantly share code, notes, and snippets.

@akexorcist
Last active January 21, 2021 19:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akexorcist/c4da85a0aa5877b24d58867add0a95d5 to your computer and use it in GitHub Desktop.
Save akexorcist/c4da85a0aa5877b24d58867add0a95d5 to your computer and use it in GitHub Desktop.
Build Coupon UI - Create corner and semi circle with condition
class CouponLayout : FrameLayout {
private var cornerDirection = /* ... */
private var semiCircleDirection = /* ... */
/* ... */
private fun setupPath() {
val isTopRightRequired = isCornerDirectionRequired(CORNER_TOP_RIGHT)
val isBottomRightRequired = isCornerDirectionRequired(CORNER_BOTTOM_RIGHT)
val isBottomLeftRequired = isCornerDirectionRequired(CORNER_BOTTOM_LEFT)
val isTopLeftRequired = isCornerDirectionRequired(CORNER_TOP_LEFT)
val isRightRequired = isSemiCircleDirectionRequired(SEMI_CIRCLE_RIGHT)
val isBottomRequired = isSemiCircleDirectionRequired(SEMI_CIRCLE_BOTTOM)
val isLeftRequired = isSemiCircleDirectionRequired(SEMI_CIRCLE_LEFT)
val isTopRequired = isSemiCircleDirectionRequired(SEMI_CIRCLE_TOP)
path.apply {
reset()
moveTo(/* Start point */)
topRightCorner(areaWidth, areaHeight, borderWidth, if (isTopRightRequired) cornerRadius else 0f)
if (isRightRequired) rightSemiCircle(areaWidth, areaHeight, borderWidth, semiCircleRadius)
bottomRightCorner(areaWidth, areaHeight, borderWidth, if (isBottomRightRequired) cornerRadius else 0f)
if (isBottomRequired) bottomSemiCircle(areaWidth, areaHeight, borderWidth, semiCircleRadius)
bottomLeftCorner(areaWidth, areaHeight, borderWidth, if (isBottomLeftRequired) cornerRadius else 0f)
if (isLeftRequired) leftSemiCircle(areaWidth, areaHeight, borderWidth, semiCircleRadius)
topLeftCorner(areaWidth, areaHeight, borderWidth, if (isTopLeftRequired) cornerRadius else 0f)
if (isTopRequired) topSemiCircle(areaWidth, areaHeight, borderWidth, semiCircleRadius)
close()
}
}
private fun isCornerDirectionRequired(direction: Int) = cornerDirection and direction == direction
private fun isSemiCircleDirectionRequired(direction: Int) = semiCircleDirection and direction == direction
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment