Last active
January 21, 2021 19:15
-
-
Save akexorcist/c4da85a0aa5877b24d58867add0a95d5 to your computer and use it in GitHub Desktop.
Build Coupon UI - Create corner and semi circle with condition
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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