diff --git a/app/src/main/kotlin/info/appdev/chartexample/BarChartActivityMultiDataset.kt b/app/src/main/kotlin/info/appdev/chartexample/BarChartActivityMultiDataset.kt index 63513c7a3..d1f81d359 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/BarChartActivityMultiDataset.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/BarChartActivityMultiDataset.kt @@ -85,6 +85,10 @@ class BarChartActivityMultiDataset : DemoBase(), OnSeekBarChangeListener, OnChar override fun getFormattedValue(value: Float, axis: AxisBase?): String { return value.toInt().toString() } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return value.toString() + } } val leftAxis = binding.chart1.axisLeft diff --git a/app/src/main/kotlin/info/appdev/chartexample/BarChartPositiveNegative.kt b/app/src/main/kotlin/info/appdev/chartexample/BarChartPositiveNegative.kt index 71cf2fe97..2f947c92b 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/BarChartPositiveNegative.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/BarChartPositiveNegative.kt @@ -81,6 +81,12 @@ class BarChartPositiveNegative : DemoBase() { override fun getFormattedValue(value: Float, axis: AxisBase?): String? { return data[min(max(value.toInt(), 0), data.size - 1)].xAxisValue } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + val ma = max(value, 0) + val mi = min(ma, (data.size - 1).toLong()).toInt() + return data[mi].xAxisValue!! + } } setData(data) diff --git a/app/src/main/kotlin/info/appdev/chartexample/CombinedChartActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/CombinedChartActivity.kt index 0633bb8ad..71f12ef03 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/CombinedChartActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/CombinedChartActivity.kt @@ -79,6 +79,10 @@ class CombinedChartActivity : DemoBase() { override fun getFormattedValue(value: Float, axis: AxisBase?): String { return months[value.toInt() % months.size] } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return months[(value % months.size).toInt()] + } } val data = CombinedData() diff --git a/app/src/main/kotlin/info/appdev/chartexample/LineChartTimeActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/LineChartTimeActivity.kt index b3b03215f..1e0f6038e 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/LineChartTimeActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/LineChartTimeActivity.kt @@ -83,6 +83,11 @@ class LineChartTimeActivity : DemoBase(), OnSeekBarChangeListener { val millis = TimeUnit.HOURS.toMillis(value.toLong()) return mFormat.format(Date(millis)) } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + val millis = TimeUnit.HOURS.toMillis(value) + return mFormat.format(Date(millis)) + } } val leftAxis = binding.chart1.axisLeft diff --git a/app/src/main/kotlin/info/appdev/chartexample/RadarChartActivity.kt b/app/src/main/kotlin/info/appdev/chartexample/RadarChartActivity.kt index 639366f97..8f3899526 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/RadarChartActivity.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/RadarChartActivity.kt @@ -62,6 +62,10 @@ class RadarChartActivity : DemoBase() { override fun getFormattedValue(value: Float, axis: AxisBase?): String { return mActivities[value.toInt() % mActivities.size] } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return mActivities[(value % mActivities.size).toInt()] + } } xAxis.textColor = Color.WHITE diff --git a/app/src/main/kotlin/info/appdev/chartexample/StackedBarActivityNegative.kt b/app/src/main/kotlin/info/appdev/chartexample/StackedBarActivityNegative.kt index 03bc1c362..7b61e8914 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/StackedBarActivityNegative.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/StackedBarActivityNegative.kt @@ -74,6 +74,10 @@ class StackedBarActivityNegative : DemoBase(), OnChartValueSelectedListener { override fun getFormattedValue(value: Float, axis: AxisBase?): String { return format.format(value.toDouble()) + "-" + format.format((value + 10).toDouble()) } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return format.format(value) + "-" + format.format((value + 10).toDouble()) + } } binding.chart1.legend.apply { @@ -218,5 +222,9 @@ class StackedBarActivityNegative : DemoBase(), OnChartValueSelectedListener { override fun getFormattedValue(value: Float, axis: AxisBase?): String { return decimalFormat.format(abs(value).toDouble()) + "m" } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return decimalFormat.format(abs(value)) + "m" + } } } diff --git a/app/src/main/kotlin/info/appdev/chartexample/formatter/DayAxisValueFormatter.kt b/app/src/main/kotlin/info/appdev/chartexample/formatter/DayAxisValueFormatter.kt index 55fa37c27..eb93713b1 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/formatter/DayAxisValueFormatter.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/formatter/DayAxisValueFormatter.kt @@ -39,6 +39,10 @@ class DayAxisValueFormatter(private val chart: BarLineChartBase<*>) : IAxisValue } } + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return getFormattedValue(value.toFloat(), axis) + } + private fun getDaysForMonth(month: Int, year: Int): Int { // month is 0-based diff --git a/app/src/main/kotlin/info/appdev/chartexample/formatter/MyAxisValueFormatter.kt b/app/src/main/kotlin/info/appdev/chartexample/formatter/MyAxisValueFormatter.kt index 1fc6ab234..4fea6673c 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/formatter/MyAxisValueFormatter.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/formatter/MyAxisValueFormatter.kt @@ -10,4 +10,8 @@ class MyAxisValueFormatter : IAxisValueFormatter { override fun getFormattedValue(value: Float, axis: AxisBase?): String { return mFormat.format(value.toDouble()) + " $" } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return mFormat.format(value) + " $" + } } diff --git a/app/src/main/kotlin/info/appdev/chartexample/formatter/YearXAxisFormatter.kt b/app/src/main/kotlin/info/appdev/chartexample/formatter/YearXAxisFormatter.kt index b1f1b433f..39fd1c139 100644 --- a/app/src/main/kotlin/info/appdev/chartexample/formatter/YearXAxisFormatter.kt +++ b/app/src/main/kotlin/info/appdev/chartexample/formatter/YearXAxisFormatter.kt @@ -13,4 +13,8 @@ class YearXAxisFormatter : IAxisValueFormatter { val percent = value / axis!!.mAxisRange return months[(months.size * percent).toInt()] } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return getFormattedValue(value.toFloat(), axis) + } } diff --git a/chartLib/src/main/kotlin/info/appdev/charting/formatter/DefaultAxisValueFormatter.kt b/chartLib/src/main/kotlin/info/appdev/charting/formatter/DefaultAxisValueFormatter.kt index c51534967..fc03b67aa 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/formatter/DefaultAxisValueFormatter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/formatter/DefaultAxisValueFormatter.kt @@ -35,4 +35,8 @@ open class DefaultAxisValueFormatter(digits: Int) : IAxisValueFormatter { // avoid memory allocations here (for performance) return decimalFormat.format(value.toDouble()) } + + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return decimalFormat.format(value) + } } diff --git a/chartLib/src/main/kotlin/info/appdev/charting/formatter/IAxisValueFormatter.kt b/chartLib/src/main/kotlin/info/appdev/charting/formatter/IAxisValueFormatter.kt index 760b6a41d..3e33cade5 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/formatter/IAxisValueFormatter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/formatter/IAxisValueFormatter.kt @@ -15,4 +15,6 @@ interface IAxisValueFormatter { * @param axis the axis the value belongs to */ fun getFormattedValue(value: Float, axis: AxisBase?): String? + + fun getFormattedValue(value: Long, axis: AxisBase?): String } diff --git a/chartLib/src/main/kotlin/info/appdev/charting/formatter/IndexAxisValueFormatter.kt b/chartLib/src/main/kotlin/info/appdev/charting/formatter/IndexAxisValueFormatter.kt index d428c8214..78cb6f0e0 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/formatter/IndexAxisValueFormatter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/formatter/IndexAxisValueFormatter.kt @@ -37,4 +37,11 @@ open class IndexAxisValueFormatter : IAxisValueFormatter { values[index] } + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return if (value < 0 || value >= values.size) + "" + else + values[value.toInt()] + } + } diff --git a/chartLib/src/main/kotlin/info/appdev/charting/formatter/LargeValueFormatter.kt b/chartLib/src/main/kotlin/info/appdev/charting/formatter/LargeValueFormatter.kt index 12692b54c..2e1041ec2 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/formatter/LargeValueFormatter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/formatter/LargeValueFormatter.kt @@ -41,6 +41,10 @@ open class LargeValueFormatter() : IValueFormatter, IAxisValueFormatter { return makePretty(value.toDouble()) + text } + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return makePretty(value) + text + } + /** * Set an appendix text to be added at the end of the formatted value. */ @@ -78,4 +82,16 @@ open class LargeValueFormatter() : IValueFormatter, IAxisValueFormatter { return decimalFormat } + private fun makePretty(number: Long): String { + var decimalFormat = decimalFormat.format(number) + val numericValue1 = Character.getNumericValue(decimalFormat[decimalFormat.length - 1]) + val numericValue2 = Character.getNumericValue(decimalFormat[decimalFormat.length - 2]) + val combined = Integer.valueOf(numericValue2.toString() + "" + numericValue1) + decimalFormat = decimalFormat.replace("E[0-9][0-9]".toRegex(), suffix[combined / 3]) + while (decimalFormat.length > maxLength || decimalFormat.matches("[0-9]+\\.[a-z]".toRegex())) { + decimalFormat = decimalFormat.substring(0, decimalFormat.length - 2) + decimalFormat.substring(decimalFormat.length - 1) + } + return decimalFormat + } + } diff --git a/chartLib/src/main/kotlin/info/appdev/charting/formatter/PercentFormatter.kt b/chartLib/src/main/kotlin/info/appdev/charting/formatter/PercentFormatter.kt index c085290ae..549c2bcfc 100644 --- a/chartLib/src/main/kotlin/info/appdev/charting/formatter/PercentFormatter.kt +++ b/chartLib/src/main/kotlin/info/appdev/charting/formatter/PercentFormatter.kt @@ -32,6 +32,8 @@ open class PercentFormatter : IValueFormatter, IAxisValueFormatter { return decimalFormat.format(value.toDouble()) + " %" } - val decimalDigits: Int - get() = 1 + override fun getFormattedValue(value: Long, axis: AxisBase?): String { + return decimalFormat.format(value) + " %" + } + }