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