From ee2689d49d5b5cc15413c9c34715e3026b550442 Mon Sep 17 00:00:00 2001
From: Rodion
Date: Fri, 16 Aug 2019 19:08:13 +0300
Subject: [PATCH] Refactor and delete unused variables
---
README.md | 21 +-
app/build.gradle | 2 +-
.../majorik/sparklinelayout/MainActivity.kt | 1 -
.../sparklinelibrary/SparkLineLayout.kt | 259 +++++++-----------
.../sparklinelibrary/data/CurvePoints.kt | 11 +-
.../src/main/res/values/attrs.xml | 21 --
.../src/main/res/values/styles.xml | 1 -
7 files changed, 117 insertions(+), 199 deletions(-)
diff --git a/README.md b/README.md
index c6687f7..be6f015 100644
--- a/README.md
+++ b/README.md
@@ -2,8 +2,10 @@
-[![Platform](https://img.shields.io/badge/platform-Android-yellow.svg)](https://www.android.com)
-[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
+[![Platform](https://img.shields.io/badge/platform-Android-brightgreen.svg)](https://www.android.com)
+[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-SparkLineLayout-yellow.svg?style=flat)](https://android-arsenal.com/details/1/7825)
+[![Release](https://img.shields.io/github/release/majorkik/SparkLineLayout.svg?style=flat)](https://jitpack.io/#majorkik/SparkLineLayout)
+[![License: MIT](https://img.shields.io/badge/License-MIT-orange.svg)](https://opensource.org/licenses/MIT)
# SparkLineLayout
@@ -11,7 +13,7 @@
Just add the following dependency in your app's `build.gradle`
```groovy
dependencies {
- implementation 'com.github.majorkik:SparkLineLayout:1.0.0'
+ implementation 'com.github.majorkik:SparkLineLayout:1.0.1'
}
```
## XML
@@ -54,17 +56,12 @@ s_marker_border_size | Sets the stroke thickness.
s_marker_circle_style | Switches marker mode to round. The default **false**, and the marker is square.
## Examples
-
-
-
-
-
-
+
-
-
-
+
+
+
# License
diff --git a/app/build.gradle b/app/build.gradle
index 39e6918..44f08e1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -32,6 +32,6 @@ dependencies {
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation project(':sparklinelibrary')
-// implementation 'com.github.majorkik:SparkLineLayout:0.0.1'
+ //implementation 'com.github.majorkik:SparkLineLayout:1.0.0'
}
diff --git a/app/src/main/java/com/majorik/sparklinelayout/MainActivity.kt b/app/src/main/java/com/majorik/sparklinelayout/MainActivity.kt
index 8080950..b267bd6 100644
--- a/app/src/main/java/com/majorik/sparklinelayout/MainActivity.kt
+++ b/app/src/main/java/com/majorik/sparklinelayout/MainActivity.kt
@@ -3,7 +3,6 @@ package com.majorik.sparklinelayout
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import android.widget.SeekBar
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
diff --git a/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/SparkLineLayout.kt b/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/SparkLineLayout.kt
index 071f719..79c8d66 100644
--- a/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/SparkLineLayout.kt
+++ b/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/SparkLineLayout.kt
@@ -9,35 +9,19 @@ import com.majorik.sparklinelibrary.data.CurvePoints
import com.majorik.sparklinelibrary.extensions.cubicTo
import kotlin.math.ceil
import kotlin.math.min
-import kotlin.random.Random
+/**
+ * SparkLineLayout simple and lightweight for drawing sparkline\graph
+ * without axes.
+ *
+ * @author Belovitskiy Rodion
+ */
class SparkLineLayout @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
- enum class SplitLineMode(val id: Int) {
- NONE(0),
- ONLY_LEFT(1),
- ONLY_RIGHT(2);
-
- companion object {
- fun fromId(id: Int) = values().firstOrNull { it.id == id } ?: NONE
- }
- }
-
- enum class SplitDotsMode(val id: Int) {
- NONE(0),
- ONLY_LEFT(1),
- ONLY_RIGHT(2),
- SINGLE_DOT(3),
- AUTO(4);
-
- companion object {
- fun fromId(id: Int) = values().firstOrNull { it.id == id } ?: NONE
- }
- }
/*
Default vars
@@ -51,7 +35,6 @@ class SparkLineLayout @JvmOverloads constructor(
private const val SPARKLINE_BEZIER = 0.5F
private const val MARKER_WIDTH = 0F
private const val MARKER_HEIGHT = 0F
- private const val MARKER_CORNER_RADIUS = 0F
private val MARKER_BACKGROUND_COLOR = Color.parseColor("#222222")
private val MARKER_BORDER_COLOR = Color.parseColor("#222222")
private const val MARKER_BORDER_SIZE = 0F
@@ -59,8 +42,6 @@ class SparkLineLayout @JvmOverloads constructor(
private const val IS_SPLIT_LINE = false
private const val IS_GRADIENT_LINE = false
private const val SPLIT_LINE_RATIO = 0.5F
- private val SPLIT_LINE_MODE = SplitLineMode.NONE
- private val SPLIT_DOTS_MODE = SplitDotsMode.NONE
}
/*
@@ -72,7 +53,6 @@ class SparkLineLayout @JvmOverloads constructor(
var sparkLineBezier: Float = SPARKLINE_BEZIER
var markerWidth: Float = MARKER_WIDTH
var markerHeight: Float = MARKER_HEIGHT
- var markerCornerRadius: Float = MARKER_CORNER_RADIUS
var markerBackgroundColor: Int = MARKER_BACKGROUND_COLOR
var markerBorderColor: Int = MARKER_BORDER_COLOR
var markerBorderSize: Float = MARKER_BORDER_SIZE
@@ -82,8 +62,6 @@ class SparkLineLayout @JvmOverloads constructor(
var lineSplitLeftColor = LINE_SPLIT_LEFT_COLOR
var lineSplitRightColor = LINE_SPLIT_RIGHT_COLOR
var isGradientLine = IS_GRADIENT_LINE
- var splitLineMode = SPLIT_LINE_MODE
- var splitDotsMode = SPLIT_DOTS_MODE
/*
Paint
@@ -93,7 +71,6 @@ class SparkLineLayout @JvmOverloads constructor(
private var paintMarkerStroke: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
private var paintLineLeft: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
private var paintLineRight: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
- private var paintSparkLineFill: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
/*
Path
@@ -101,7 +78,6 @@ class SparkLineLayout @JvmOverloads constructor(
private var pathSparkLine: Path = Path()
private var pathLineLeft: Path = Path()
private var pathLineRight: Path = Path()
- private var pathSparkLineFill: Path = Path()
/*
Data
@@ -142,12 +118,6 @@ class SparkLineLayout @JvmOverloads constructor(
markerHeight =
styledAttrs.getDimension(R.styleable.SparkLineLayout_s_marker_height, MARKER_HEIGHT)
- markerCornerRadius =
- styledAttrs.getDimension(
- R.styleable.SparkLineLayout_s_marker_radius,
- MARKER_CORNER_RADIUS
- )
-
markerBackgroundColor = styledAttrs.getColor(
R.styleable.SparkLineLayout_s_marker_background_color,
MARKER_BACKGROUND_COLOR
@@ -198,20 +168,6 @@ class SparkLineLayout @JvmOverloads constructor(
LINE_SPLIT_RIGHT_COLOR
)
- splitLineMode = SplitLineMode.fromId(
- styledAttrs.getInt(
- R.styleable.SparkLineLayout_s_split_line_mode,
- SPLIT_LINE_MODE.id
- )
- )
-
- splitDotsMode = SplitDotsMode.fromId(
- styledAttrs.getInt(
- R.styleable.SparkLineLayout_s_split_dots_mode,
- SPLIT_DOTS_MODE.id
- )
- )
-
styledAttrs.recycle()
}
@@ -223,18 +179,6 @@ class SparkLineLayout @JvmOverloads constructor(
)
)
- } else {
- //random data
- val randomData: ArrayList = arrayListOf()
- for (i in 0..10) {
- val random = Random.nextInt(25)
- randomData.add(random)
- }
- setData(
- arrayListOf(
- 298, 46, 87, 178, 446, 1167, 1855, 1543, 662, 1583
- )
- )
}
}
@@ -288,18 +232,6 @@ class SparkLineLayout @JvmOverloads constructor(
return result
}
- fun setData(arrayData: ArrayList) {
- inputData.clear()
- data.clear()
- inputData = arrayData
-
- val num = getCountNumForMaxNum(inputData.max() ?: 0)
-
- inputData.forEach {
- data.add(it * num)
- }
- }
-
private fun getCountNumForMaxNum(num: Int): Float {
var n = 0.1F
return if (num > 100) {
@@ -316,6 +248,17 @@ class SparkLineLayout @JvmOverloads constructor(
}
}
+ fun setData(arrayData: ArrayList) {
+ inputData.clear()
+ data.clear()
+ inputData = arrayData
+
+ val num = getCountNumForMaxNum(inputData.max() ?: 0)
+
+ inputData.forEach {
+ data.add(it * num)
+ }
+ }
private fun initPaint() {
paintSparkLine.color = sparkLineColor
@@ -351,9 +294,6 @@ class SparkLineLayout @JvmOverloads constructor(
paintLineRight.strokeWidth = sparkLineThickness
paintLineRight.strokeCap = Paint.Cap.ROUND
paintLineRight.style = Paint.Style.STROKE
-
- paintSparkLineFill.style = Paint.Style.FILL
- paintSparkLineFill.color = sparkLineColor
}
private fun initLocalVars() {
@@ -403,89 +343,6 @@ class SparkLineLayout @JvmOverloads constructor(
}
canvas.drawPath(pathSparkLine, paintSparkLine)
- invalidate()
- }
-
- private fun getPrevVal(index: Int): Float {
- return (when {
- index > 0 -> data[index - 1] - dataMin
- else -> data[index] - dataMin
- }).toFloat()
- }
-
- private fun getNextVal(index: Int): Float {
- return (if (index < data.size - 1) {
- data[index + 1] - dataMin
- } else {
- data[index] - dataMin
- }).toFloat()
- }
-
- private fun getPrevD(xStart: Float, index: Int, prevVal: Float): PointF {
- return PointF(
- (xStart - (xStart - xStep)) * sparkLineBezier,
- ((data[index] - dataMin) - prevVal) * sparkLineBezier
- )
- }
-
- private fun getCurD(xStart: Float, index: Int, nextVal: Float): PointF {
- return PointF(
- ((xStart + xStep) - xStart) * sparkLineBezier,
- (nextVal - (data[index] - dataMin)) * sparkLineBezier
- )
- }
-
- private fun getControlPointLeft(xStart: Float, prevVal: Float, prevD: PointF): PointF {
- return PointF(
- (xStart - xStep) + prevD.x,
- (((measuredHeight - heightPadding) - (prevVal * yStep)) - prevD.y)
- )
- }
-
- private fun getControlPointRight(xStart: Float, index: Int, curD: PointF): PointF {
- return PointF(
- xStart - curD.x,
- ((measuredHeight - heightPadding) - ((data[index] - dataMin) * yStep)) + curD.y
- )
- }
-
- private fun getCurrentPoint(xStart: Float, index: Int): PointF {
- return PointF(xStart, (measuredHeight - heightPadding) - ((data[index] - dataMin) * yStep))
- }
-
- private fun drawMarkers(canvas: Canvas) {
- for (i in 0 until data.size) {
- val x: Float = i * xStep
- val y: Float = (measuredHeight - heightPadding) - ((data[i] - dataMin) * yStep)
-
- drawMarker(canvas, x + heightPadding, y)
- }
- }
-
- private fun drawMarker(canvas: Canvas, x: Float, y: Float) {
- if (markerIsCircleStyle) {
- canvas.drawCircle(x, y, markerWidth / 2, paintMarker)
- if (markerBorderSize > 0) {
- canvas.drawCircle(x, y, markerWidth / 2, paintMarkerStroke)
- }
- } else {
- canvas.drawRect(
- x - (markerWidth / 2),
- y - (markerHeight / 2),
- x + (markerWidth / 2),
- y + (markerHeight / 2),
- paintMarker
- )
- if (markerBorderSize > 0) {
- canvas.drawRect(
- x - (markerWidth / 2),
- y - (markerHeight / 2),
- x + (markerWidth / 2),
- y + (markerHeight / 2),
- paintMarkerStroke
- )
- }
- }
}
private fun drawSplitLine(canvas: Canvas) {
@@ -550,6 +407,88 @@ class SparkLineLayout @JvmOverloads constructor(
canvas.drawPath(pathLineLeft, paintLineLeft)
}
+ private fun drawMarkers(canvas: Canvas) {
+ for (i in 0 until data.size) {
+ val x: Float = i * xStep
+ val y: Float = (measuredHeight - heightPadding) - ((data[i] - dataMin) * yStep)
+
+ drawMarker(canvas, x + heightPadding, y)
+ }
+ }
+
+ private fun drawMarker(canvas: Canvas, x: Float, y: Float) {
+ if (markerIsCircleStyle) {
+ canvas.drawCircle(x, y, markerWidth / 2, paintMarker)
+ if (markerBorderSize > 0) {
+ canvas.drawCircle(x, y, markerWidth / 2, paintMarkerStroke)
+ }
+ } else {
+ canvas.drawRect(
+ x - (markerWidth / 2),
+ y - (markerHeight / 2),
+ x + (markerWidth / 2),
+ y + (markerHeight / 2),
+ paintMarker
+ )
+ if (markerBorderSize > 0) {
+ canvas.drawRect(
+ x - (markerWidth / 2),
+ y - (markerHeight / 2),
+ x + (markerWidth / 2),
+ y + (markerHeight / 2),
+ paintMarkerStroke
+ )
+ }
+ }
+ }
+
+ private fun getPrevVal(index: Int): Float {
+ return (when {
+ index > 0 -> data[index - 1] - dataMin
+ else -> data[index] - dataMin
+ }).toFloat()
+ }
+
+ private fun getNextVal(index: Int): Float {
+ return (if (index < data.size - 1) {
+ data[index + 1] - dataMin
+ } else {
+ data[index] - dataMin
+ }).toFloat()
+ }
+
+ private fun getPrevD(xStart: Float, index: Int, prevVal: Float): PointF {
+ return PointF(
+ (xStart - (xStart - xStep)) * sparkLineBezier,
+ ((data[index] - dataMin) - prevVal) * sparkLineBezier
+ )
+ }
+
+ private fun getCurD(xStart: Float, index: Int, nextVal: Float): PointF {
+ return PointF(
+ ((xStart + xStep) - xStart) * sparkLineBezier,
+ (nextVal - (data[index] - dataMin)) * sparkLineBezier
+ )
+ }
+
+ private fun getControlPointLeft(xStart: Float, prevVal: Float, prevD: PointF): PointF {
+ return PointF(
+ (xStart - xStep) + prevD.x,
+ (((measuredHeight - heightPadding) - (prevVal * yStep)) - prevD.y)
+ )
+ }
+
+ private fun getControlPointRight(xStart: Float, index: Int, curD: PointF): PointF {
+ return PointF(
+ xStart - curD.x,
+ ((measuredHeight - heightPadding) - ((data[index] - dataMin) * yStep)) + curD.y
+ )
+ }
+
+ private fun getCurrentPoint(xStart: Float, index: Int): PointF {
+ return PointF(xStart, (measuredHeight - heightPadding) - ((data[index] - dataMin) * yStep))
+ }
+
private fun calculateSplitNumPoint(): Int {
val widthRatio = measuredWidth * splitLineRatio
return when (splitLineRatio) {
diff --git a/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/data/CurvePoints.kt b/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/data/CurvePoints.kt
index 2fa5310..0f7c3fc 100644
--- a/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/data/CurvePoints.kt
+++ b/sparklinelibrary/src/main/java/com/majorik/sparklinelibrary/data/CurvePoints.kt
@@ -2,9 +2,14 @@ package com.majorik.sparklinelibrary.data
import android.graphics.PointF
-/*
- p1, p2 - first & second points
- cp1, cp2 - first & second control points
+/**
+ * Data object that stores points for a curve.
+ * (Start and end points and control points for them)
+ *
+ * p1, p2 - Start & end points
+ * cp1, cp2 - Start control & end control points
+ *
+ * @author Belovitskiy Rodion
*/
data class CurvePoints(
diff --git a/sparklinelibrary/src/main/res/values/attrs.xml b/sparklinelibrary/src/main/res/values/attrs.xml
index 3f5cc51..606888b 100644
--- a/sparklinelibrary/src/main/res/values/attrs.xml
+++ b/sparklinelibrary/src/main/res/values/attrs.xml
@@ -16,32 +16,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/sparklinelibrary/src/main/res/values/styles.xml b/sparklinelibrary/src/main/res/values/styles.xml
index dc881e0..853249d 100644
--- a/sparklinelibrary/src/main/res/values/styles.xml
+++ b/sparklinelibrary/src/main/res/values/styles.xml
@@ -5,7 +5,6 @@
- 0dp
- 0dp
- 0dp
- - 0dp
- #222222
- #222222
- 0dp