aboutsummaryrefslogtreecommitdiff
path: root/colorpicker
diff options
context:
space:
mode:
Diffstat (limited to 'colorpicker')
-rw-r--r--colorpicker/src/main/kotlin/ca/allanwang/kau/colorpicker/CircleView.kt27
-rw-r--r--colorpicker/src/main/res-public/values/attrs.xml6
2 files changed, 29 insertions, 4 deletions
diff --git a/colorpicker/src/main/kotlin/ca/allanwang/kau/colorpicker/CircleView.kt b/colorpicker/src/main/kotlin/ca/allanwang/kau/colorpicker/CircleView.kt
index 27849bc..d2cda83 100644
--- a/colorpicker/src/main/kotlin/ca/allanwang/kau/colorpicker/CircleView.kt
+++ b/colorpicker/src/main/kotlin/ca/allanwang/kau/colorpicker/CircleView.kt
@@ -49,7 +49,11 @@ import kotlin.math.roundToInt
* An extension of MaterialDialog's CircleView with animation selection
* [https://github.com/afollestad/material-dialogs/blob/master/commons/src/main/java/com/afollestad/materialdialogs/color/CircleView.java]
*/
-class CircleView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
+class CircleView @JvmOverloads constructor(
+ context: Context,
+ attrs: AttributeSet? = null,
+ defStyleAttr: Int = 0
+) :
FrameLayout(context, attrs, defStyleAttr) {
private val borderWidthMicro: Float = context.getDip(1f)
@@ -70,10 +74,22 @@ class CircleView @JvmOverloads constructor(context: Context, attrs: AttributeSet
invalidate()
}
}
+ var selectedRing: Boolean = true
init {
update(Color.DKGRAY)
setWillNotDraw(false)
+ context.theme.obtainStyledAttributes(
+ attrs,
+ R.styleable.CircleView,
+ 0, 0
+ ).apply {
+ try {
+ selectedRing = getBoolean(R.styleable.CircleView_selectedRing, selectedRing)
+ } finally {
+ recycle()
+ }
+ }
}
private fun update(@ColorInt color: Int) {
@@ -123,10 +139,13 @@ class CircleView @JvmOverloads constructor(context: Context, attrs: AttributeSet
}
fun animateSelected(selected: Boolean) {
- if (this.selected == selected) return
+ if (!this.selectedRing || this.selected == selected) return
this.selected = selected // We need to draw the other bands
val range =
- if (selected) Pair(-borderWidthSmall, borderWidthLarge) else Pair(borderWidthLarge, -borderWidthSmall)
+ if (selected) Pair(-borderWidthSmall, borderWidthLarge) else Pair(
+ borderWidthLarge,
+ -borderWidthSmall
+ )
ValueAnimator.ofFloat(range.first, range.second).apply {
reverse()
duration = 150L
@@ -148,7 +167,7 @@ class CircleView @JvmOverloads constructor(context: Context, attrs: AttributeSet
val centerWidth = (measuredWidth / 2).toFloat()
val centerHeight = (measuredHeight / 2).toFloat()
if (withBorder) canvas.drawCircle(centerWidth, centerHeight, centerWidth, whitePaint)
- if (selected) {
+ if (selected && selectedRing) {
val whiteRadius = centerWidth - whiteOuterBound
val innerRadius = whiteRadius - borderWidthSmall
if (whiteRadius >= centerWidth) {
diff --git a/colorpicker/src/main/res-public/values/attrs.xml b/colorpicker/src/main/res-public/values/attrs.xml
new file mode 100644
index 0000000..f208ebf
--- /dev/null
+++ b/colorpicker/src/main/res-public/values/attrs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <declare-styleable name="CircleView" tools:ignore="ResourceName">
+ <attr format="boolean" name="selectedRing" />
+ </declare-styleable>
+</resources>