From b9379d65262ebcf038a9f6faff9f275129f8e9cb Mon Sep 17 00:00:00 2001 From: Avior Date: Mon, 16 Jan 2023 00:50:34 +0100 Subject: [PATCH] fix: barchart: text overflowing if bar is too small (#41) --- .../src/main/java/com/dzeio/charts/axis/XAxis.kt | 8 ++++++-- .../java/com/dzeio/charts/axis/XAxisInterface.kt | 15 +++++++++++++++ .../src/main/java/com/dzeio/charts/axis/YAxis.kt | 2 +- .../java/com/dzeio/charts/axis/YAxisInterface.kt | 2 ++ .../main/java/com/dzeio/charts/series/BarSerie.kt | 9 +++++++-- .../java/com/dzeio/charts/series/LineSerie.kt | 4 ++-- 6 files changed, 33 insertions(+), 7 deletions(-) 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 5dde1a5..07406f8 100644 --- a/library/src/main/java/com/dzeio/charts/axis/XAxis.kt +++ b/library/src/main/java/com/dzeio/charts/axis/XAxis.kt @@ -52,7 +52,7 @@ class XAxis( } override fun getPositionOnRect(entry: Entry, drawableSpace: RectF): Double { - val result = drawableSpace.left + drawableSpace.width() * (entry.x - x) / getDataWidth() + val result = getPositionOnRect(entry.x, drawableSpace) if (view.type == ChartType.GROUPED) { val serie = view.series.find { it.entries.contains(entry) } val index = view.series.indexOf(serie) @@ -61,6 +61,10 @@ class XAxis( return result } + override fun getPositionOnRect(position: Double, drawableSpace: RectF): Double { + return drawableSpace.left + drawableSpace.width() * (position - x) / getDataWidth() + } + override fun getXMax(): Double { return view.series.maxOf { serie -> if (serie.entries.isEmpty()) { @@ -79,7 +83,7 @@ class XAxis( } } - var onValueFormat: (value: Double) -> String = { it -> it.roundToInt().toString() } + override var onValueFormat: (value: Double) -> String = { it -> it.roundToInt().toString() } override fun onDraw(canvas: Canvas, space: RectF): Float { if (!enabled) { diff --git a/library/src/main/java/com/dzeio/charts/axis/XAxisInterface.kt b/library/src/main/java/com/dzeio/charts/axis/XAxisInterface.kt index 270426f..dfb33d3 100644 --- a/library/src/main/java/com/dzeio/charts/axis/XAxisInterface.kt +++ b/library/src/main/java/com/dzeio/charts/axis/XAxisInterface.kt @@ -41,6 +41,8 @@ sealed interface XAxisInterface { */ var scrollEnabled: Boolean + var onValueFormat: (value: Double) -> String + /** * run when manually refreshing the system * @@ -51,10 +53,23 @@ sealed interface XAxisInterface { /** * get the entry position on the rect * + * @param entry the entry to place + * @param drawableSpace the space it should go into + * * @return the left side of the position of the entry */ fun getPositionOnRect(entry: Entry, drawableSpace: RectF): Double + /** + * get the entry position on the rect + * + * @param position the position of your point + * @param drawableSpace the space it should go into + * + * @return the left side of the position of the entry + */ + fun getPositionOnRect(position: Double, drawableSpace: RectF): Double + /** * get the maximum the X can get to */ diff --git a/library/src/main/java/com/dzeio/charts/axis/YAxis.kt b/library/src/main/java/com/dzeio/charts/axis/YAxis.kt index 2e6a038..194af1e 100644 --- a/library/src/main/java/com/dzeio/charts/axis/YAxis.kt +++ b/library/src/main/java/com/dzeio/charts/axis/YAxis.kt @@ -36,7 +36,7 @@ class YAxis( strokeWidth = 4f } - var onValueFormat: (value: Float) -> String = { it -> it.roundToInt().toString() } + override var onValueFormat: (value: Float) -> String = { it -> it.roundToInt().toString() } override var labelCount = 5 diff --git a/library/src/main/java/com/dzeio/charts/axis/YAxisInterface.kt b/library/src/main/java/com/dzeio/charts/axis/YAxisInterface.kt index 4fb9583..d7a77b7 100644 --- a/library/src/main/java/com/dzeio/charts/axis/YAxisInterface.kt +++ b/library/src/main/java/com/dzeio/charts/axis/YAxisInterface.kt @@ -39,6 +39,8 @@ sealed interface YAxisInterface { */ var scrollEnabled: Boolean + var onValueFormat: (value: Float) -> String + /** * do the Zero line gets drawn? */ diff --git a/library/src/main/java/com/dzeio/charts/series/BarSerie.kt b/library/src/main/java/com/dzeio/charts/series/BarSerie.kt index 0ef16a1..bdb9612 100644 --- a/library/src/main/java/com/dzeio/charts/series/BarSerie.kt +++ b/library/src/main/java/com/dzeio/charts/series/BarSerie.kt @@ -5,11 +5,11 @@ import android.graphics.Color import android.graphics.Paint import android.graphics.Rect import android.graphics.RectF -import com.dzeio.charts.ChartView +import com.dzeio.charts.ChartViewInterface import com.dzeio.charts.utils.drawRoundRect class BarSerie( - private val view: ChartView + private val view: ChartViewInterface ) : BaseSerie(view) { private companion object { @@ -48,6 +48,7 @@ class BarSerie( val barWidth = view.xAxis.getEntryWidth(drawableSpace).toFloat() val zero = view.yAxis.getPositionOnRect(0f, drawableSpace) + .coerceIn(drawableSpace.top, drawableSpace.bottom) var needUpdate = false @@ -134,6 +135,10 @@ class BarSerie( textPaint.getTextBounds(text, 0, text.length, rect) + if (barWidth < rect.width()) { + continue + } + // text center X val textX = (posX + barWidth / 2) diff --git a/library/src/main/java/com/dzeio/charts/series/LineSerie.kt b/library/src/main/java/com/dzeio/charts/series/LineSerie.kt index 5d3c5bb..ebdf248 100644 --- a/library/src/main/java/com/dzeio/charts/series/LineSerie.kt +++ b/library/src/main/java/com/dzeio/charts/series/LineSerie.kt @@ -4,11 +4,11 @@ import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.RectF -import com.dzeio.charts.ChartView +import com.dzeio.charts.ChartViewInterface import kotlin.math.abs class LineSerie( - private val view: ChartView + private val view: ChartViewInterface ) : BaseSerie(view) { private companion object {