From 4cc28ae6756d91cad3ef770380854fe0e71a7057 Mon Sep 17 00:00:00 2001 From: Farhad Beigirad Date: Fri, 30 Oct 2020 18:44:21 +0330 Subject: [PATCH 1/2] add effect for right and left sides #8 --- .../java/ir/beigirad/zigzagview/ZigzagView.kt | 50 +++++++++++++++++-- library/src/main/res/values/attrs.xml | 2 + sample/src/main/res/layout/activity_main.xml | 4 +- 3 files changed, 50 insertions(+), 6 deletions(-) diff --git a/library/src/main/java/ir/beigirad/zigzagview/ZigzagView.kt b/library/src/main/java/ir/beigirad/zigzagview/ZigzagView.kt index 46bc4c5..77ce395 100644 --- a/library/src/main/java/ir/beigirad/zigzagview/ZigzagView.kt +++ b/library/src/main/java/ir/beigirad/zigzagview/ZigzagView.kt @@ -91,9 +91,9 @@ class ZigzagView @JvmOverloads constructor( rectMain.bottom - zigzagPaddingBottom ) rectContent.set( - rectZigzag.left + zigzagPaddingContent, + rectZigzag.left + zigzagPaddingContent + (if (containsSide(zigzagSides, ZIGZAG_LEFT)) zigzagHeight else 0f), rectZigzag.top + zigzagPaddingContent + (if (containsSide(zigzagSides, ZIGZAG_TOP)) zigzagHeight else 0f), - rectZigzag.right - zigzagPaddingContent, + rectZigzag.right - zigzagPaddingContent - if (containsSide(zigzagSides, ZIGZAG_RIGHT)) zigzagHeight else 0f, rectZigzag.bottom - zigzagPaddingContent - if (containsSide(zigzagSides, ZIGZAG_BOTTOM)) zigzagHeight else 0f ) super.setPadding( @@ -120,12 +120,18 @@ class ZigzagView @JvmOverloads constructor( val top = rectZigzag.top val bottom = rectZigzag.bottom pathZigzag.moveTo(right, bottom) - pathZigzag.lineTo(right, top) + if (containsSide(zigzagSides, ZIGZAG_RIGHT) && zigzagHeight > 0) + drawVerticalSide(pathZigzag, top, right, bottom, isLeft = false) + else + pathZigzag.lineTo(right, top) if (containsSide(zigzagSides, ZIGZAG_TOP) && zigzagHeight > 0) drawHorizontalSide(pathZigzag, left, top, right, isTop = true) else pathZigzag.lineTo(left, top) - pathZigzag.lineTo(left, bottom) + if (containsSide(zigzagSides, ZIGZAG_LEFT) && zigzagHeight > 0) + drawVerticalSide(pathZigzag, top, left, bottom, isLeft = true) + else + pathZigzag.lineTo(left, bottom) if (containsSide(zigzagSides, ZIGZAG_BOTTOM) && zigzagHeight > 0) drawHorizontalSide(pathZigzag, left, bottom, right, isTop = false) else @@ -184,6 +190,40 @@ class ZigzagView @JvmOverloads constructor( } } + private fun drawVerticalSide(path: Path, top: Float, x: Float, bottom: Float, isLeft: Boolean) { + val h = zigzagHeight + val seed = 2 * h + val width = bottom - top + val count: Int = (width / seed).toInt() + val diff = width - seed * count + val sideDiff = diff / 2 + val halfSeed = seed / 2 + val innerHeight = if (isLeft) x + h else x - h + if (!isLeft) { + for (i in count downTo 1) { + val startSeed = i * seed + sideDiff + top.toInt() + var endSeed = startSeed - seed + if (i == 1) { + endSeed -= sideDiff + } + path.lineTo(innerHeight, startSeed - halfSeed) + path.lineTo(x, endSeed) + } + } else { + for (i in 0 until count) { + var startSeed = i * seed + sideDiff + top.toInt() + var endSeed = startSeed + seed + if (i == 0) { + startSeed = top.toInt() + sideDiff + } else if (i == count - 1) { + endSeed += sideDiff + } + path.lineTo(innerHeight, startSeed + halfSeed) + path.lineTo(x, endSeed) + } + } + } + private fun containsSide(flagSet: Int, flag: Int): Boolean { return flagSet or flag == flagSet } @@ -191,5 +231,7 @@ class ZigzagView @JvmOverloads constructor( companion object { private const val ZIGZAG_TOP = 1 private const val ZIGZAG_BOTTOM = 2 // default to be backward compatible.Like google ;) + private const val ZIGZAG_RIGHT = 4 + private const val ZIGZAG_LEFT = 8 } } \ No newline at end of file diff --git a/library/src/main/res/values/attrs.xml b/library/src/main/res/values/attrs.xml index 8269ebc..f808f72 100644 --- a/library/src/main/res/values/attrs.xml +++ b/library/src/main/res/values/attrs.xml @@ -13,6 +13,8 @@ + + diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index aebb46c..631c100 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -15,7 +15,7 @@ app:zigzagHeight="7dp" app:zigzagPaddingContent="16dp" app:zigzagShadowAlpha="0.9" - app:zigzagSides="bottom"> + app:zigzagSides="bottom|right"> + app:zigzagSides="top|bottom|left|right"> Date: Fri, 30 Oct 2020 18:49:17 +0330 Subject: [PATCH 2/2] minor --- sample/src/main/res/layout/activity_main.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 631c100..71a66b3 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -3,8 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical" - android:gravity="center_horizontal"> + android:gravity="center_horizontal" + android:orientation="vertical"> @@ -57,6 +57,7 @@ android:id="@+id/btn_randomize" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginTop="16dp" android:text="Change Background" />