diff --git a/library/src/main/java/com/dzeio/charts/ChartType.kt b/library/src/main/java/com/dzeio/charts/ChartType.kt
new file mode 100644
index 0000000..dce29bd
--- /dev/null
+++ b/library/src/main/java/com/dzeio/charts/ChartType.kt
@@ -0,0 +1,21 @@
+package com.dzeio.charts
+
+enum class ChartType {
+
+ /**
+ * Basic Chart where items go over the other
+ */
+ BASIC,
+
+ /**
+ * each series are next to each other nicely
+ */
+ GROUPED,
+
+ /**
+ * WILL NOT DO ANYTHING CURRENTLY
+ *
+ * Each series are stacked over the other one
+ */
+ STACKED
+}
\ No newline at end of file
diff --git a/library/src/main/java/com/dzeio/charts/ChartView.kt b/library/src/main/java/com/dzeio/charts/ChartView.kt
index fed5dc9..63258a8 100644
--- a/library/src/main/java/com/dzeio/charts/ChartView.kt
+++ b/library/src/main/java/com/dzeio/charts/ChartView.kt
@@ -21,6 +21,8 @@ class ChartView @JvmOverloads constructor(context: Context?, attrs: AttributeSet
const val TAG = "Charts/ChartView"
}
+ override var type: ChartType = ChartType.BASIC
+
override var debug: Boolean = false
override val xAxis = XAxis(this)
diff --git a/library/src/main/java/com/dzeio/charts/ChartViewInterface.kt b/library/src/main/java/com/dzeio/charts/ChartViewInterface.kt
index b566f21..c1ae574 100644
--- a/library/src/main/java/com/dzeio/charts/ChartViewInterface.kt
+++ b/library/src/main/java/com/dzeio/charts/ChartViewInterface.kt
@@ -6,6 +6,11 @@ import com.dzeio.charts.series.SerieInterface
interface ChartViewInterface {
+ /**
+ * Chart Type
+ */
+ var type: ChartType
+
/**
* Make the whole view in debug mode
*
diff --git a/library/src/main/java/com/dzeio/charts/axis/XAxis.kt b/library/src/main/java/com/dzeio/charts/axis/XAxis.kt
index 26062d5..a6833e2 100644
--- a/library/src/main/java/com/dzeio/charts/axis/XAxis.kt
+++ b/library/src/main/java/com/dzeio/charts/axis/XAxis.kt
@@ -5,6 +5,7 @@ import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.RectF
+import com.dzeio.charts.ChartType
import com.dzeio.charts.ChartViewInterface
import com.dzeio.charts.Entry
import kotlin.math.roundToInt
@@ -51,11 +52,13 @@ class XAxis(
}
override fun getPositionOnRect(entry: Entry, drawableSpace: RectF): Double {
- return translatePositionToRect(entry.x, drawableSpace)
- }
-
- fun translatePositionToRect(value: Double, drawableSpace: RectF): Double {
- return drawableSpace.width() * (value - x) / getDataWidth()
+ val result = drawableSpace.width() * (entry.x - x) / getDataWidth()
+ if (view.type == ChartType.GROUPED) {
+ val serie = view.series.find { it.entries.contains(entry) }
+ val index = view.series.indexOf(serie)
+ return result + getEntryWidth(drawableSpace) * index + spacing / 2 * index
+ }
+ return result
}
override fun getXMax(): Double {
@@ -123,8 +126,15 @@ class XAxis(
}
}
- return (drawableSpace.width() * smallest / getDataWidth() - spacing)
+ val result = (drawableSpace.width() * smallest / getDataWidth() - spacing)
.coerceIn(1.0, drawableSpace.width().toDouble())
+
+ // handle grouped series
+ if (view.type == ChartType.GROUPED) {
+ return result / view.series.size - spacing / 2 * (view.series.size - 1)
+ }
+
+ return result
}
override fun getDataWidth(): Double {
diff --git a/sample/src/main/java/com/dzeio/chartstest/ui/MainFragment.kt b/sample/src/main/java/com/dzeio/chartstest/ui/MainFragment.kt
index 370710f..7b2ea91 100644
--- a/sample/src/main/java/com/dzeio/chartstest/ui/MainFragment.kt
+++ b/sample/src/main/java/com/dzeio/chartstest/ui/MainFragment.kt
@@ -6,6 +6,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
+import com.dzeio.charts.ChartType
import com.dzeio.charts.ChartView
import com.dzeio.charts.Entry
import com.dzeio.charts.series.BarSerie
@@ -30,21 +31,27 @@ class MainFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
- binding.chart1.apply {
+ binding.chartGrouped.apply {
// setup the Serie
- val serie = BarSerie(this)
+ val serie1 = BarSerie(this)
+ val serie2 = BarSerie(this)
+
+ // transform the chart into a grouped chart
+ type = ChartType.GROUPED
// utils function to use Material3 auto colors
materielTheme(this, requireView())
+ serie2.barPaint.color = Color.RED
// give the serie it's entries
- serie.entries = generateRandomDataset(10)
+ serie1.entries = generateRandomDataset(10)
+ serie2.entries = generateRandomDataset(10)
// refresh the Chart
refresh()
}
- binding.chart2.apply {
+ binding.chartLine.apply {
// setup the Serie
val serie = LineSerie(this)
@@ -58,7 +65,21 @@ class MainFragment : Fragment() {
refresh()
}
- binding.chart3.apply {
+ binding.chartBar.apply {
+ // setup the Serie
+ val serie = BarSerie(this)
+
+ // utils function to use Material3 auto colors
+ materielTheme(this, requireView())
+
+ // give the serie its entries
+ serie.entries = generateRandomDataset(10)
+
+ // refresh the Chart
+ refresh()
+ }
+
+ binding.chartCustomization.apply {
// setup the Series
val serie1 = BarSerie(this)
val serie2 = LineSerie(this)
diff --git a/sample/src/main/res/drawable/shape_divider.xml b/sample/src/main/res/drawable/shape_divider.xml
new file mode 100644
index 0000000..a7e6373
--- /dev/null
+++ b/sample/src/main/res/drawable/shape_divider.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/fragment_main.xml b/sample/src/main/res/layout/fragment_main.xml
index 7dd6bee..eeaafe6 100644
--- a/sample/src/main/res/layout/fragment_main.xml
+++ b/sample/src/main/res/layout/fragment_main.xml
@@ -6,35 +6,39 @@
android:layout_height="match_parent"
tools:context=".ui.MainFragment">
-
-
-
+
+
+
-
-
-
+
\ No newline at end of file