Package-level declarations
Types
Link copied to clipboard
data class BarChartData(val chartData: List<BarData>, val xAxisData: AxisData = AxisData.Builder().build(), val yAxisData: AxisData = AxisData.Builder().build(), val backgroundColor: Color = Color.White, val horizontalExtraSpace: Dp = 0.dp, val barStyle: BarStyle = BarStyle(), val paddingEnd: Dp = 10.dp, val paddingTop: Dp = 0.dp, val tapPadding: Dp = 10.dp, val showYAxis: Boolean = true, val showXAxis: Boolean = true, val accessibilityConfig: AccessibilityConfig = AccessibilityConfig(), val barChartType: BarChartType = BarChartType.VERTICAL, val drawBar: (DrawScope, BarData, Offset, Float, BarChartType, BarStyle) -> Unit = { drawScope, barChartData, drawOffset, height, barChartType, barStyle ->
//default implementation
drawBarGraph(drawScope, barChartData, drawOffset, height, barChartType, barStyle)
})
BarGraph data class params used in drawing bar graph.
Link copied to clipboard
To specify barchart type
Link copied to clipboard
data class BarData(val point: Point, val color: Color = Color.Red, val label: String = "", val gradientColorList: List<Color> = listOf(Color.Red, Color.Blue), val dataCategoryOptions: DataCategoryOptions = DataCategoryOptions(), val description: String = if (dataCategoryOptions.isDataCategoryInYAxis) "Value of bar $label is value ${
String.format(
"%.2f",
point.x
)
}" else "Value of bar $label is value ${String.format("%.2f", point.y)}")
Data class for individual bar.
Link copied to clipboard
data class BarPlotData(val plotType: PlotType = PlotType.Bar, val groupBarList: List<GroupBar>, val groupingSize: Int = groupBarList.firstOrNull()?.barList?.size ?: 1, val barColorPaletteList: List<Color> = listOf(), val barStyle: BarStyle = BarStyle()) : PlotData
BarPlotData is a data class that holds bar graph related data and styling components
Link copied to clipboard
data class BarStyle(val barWidth: Dp = 30.dp, val cornerRadius: Dp = 4.dp, val paddingBetweenBars: Dp = 15.dp, val isGradientEnabled: Boolean = false, val barBlendMode: BlendMode = DrawScope.DefaultBlendMode, val barDrawStyle: DrawStyle = Fill, val selectionHighlightData: SelectionHighlightData? = SelectionHighlightData())
BarStyle data class adds styling related to each bar in the bar graph
Link copied to clipboard
data class GroupBarChartData(val barPlotData: BarPlotData, val xAxisData: AxisData = AxisData.Builder().build(), val yAxisData: AxisData = AxisData.Builder().build(), val backgroundColor: Color = Color.White, val horizontalExtraSpace: Dp = 10.dp, val paddingEnd: Dp = 10.dp, val paddingTop: Dp = 0.dp, val showYAxis: Boolean = true, val showXAxis: Boolean = true, val tapPadding: Dp = 10.dp, val groupSeparatorConfig: GroupSeparatorConfig = GroupSeparatorConfig(), val accessibilityConfig: AccessibilityConfig = AccessibilityConfig(), val paddingBetweenStackedBars: Dp = 0.dp, val drawBar: (DrawScope, GroupBarChartData, BarStyle, Offset, Float, Int) -> Unit = { drawScope, barChartData, barStyle, drawOffset, height, barIndex ->
//default implementation
drawGroupBarGraph(
drawScope,
barChartData,
barStyle,
drawOffset,
height,
barPlotData.barColorPaletteList[barIndex],
barIndex
)
})
GroupBarGraph data class params used in drawing bar graph.
Link copied to clipboard
data class GroupSeparatorConfig(val separatorWidth: Dp = 1.dp, val separatorColor: Color = Color.Gray, val showSeparator: Boolean = true, val separatorBlendMode: BlendMode = DrawScope.DefaultBlendMode)
GroupSeparatorConfig data class params used in config groupSeparator.
Link copied to clipboard
data class SelectionHighlightData(val highlightTextOffset: Dp = 15.dp, val highlightTextSize: TextUnit = 12.sp, val highlightTextColor: Color = Color.Black, val highlightTextBackgroundColor: Color = Color.Yellow, val highlightTextBackgroundAlpha: Float = 0.7f, val highlightTextTypeface: Typeface = Typeface.DEFAULT, val highlightBarCornerRadius: Dp = 2.dp, val highlightBarColor: Color = Color.Black, val highlightBarStrokeWidth: Dp = 2.dp, val highlightPopUpCornerRadius: CornerRadius = CornerRadius(5f), val backgroundColorFilter: ColorFilter? = null, val backgroundBlendMode: BlendMode = DrawScope.DefaultBlendMode, val backgroundStyle: DrawStyle = Fill, val highlightLabelAlignment: Paint.Align = Paint.Align.CENTER, val isHighlightBarRequired: Boolean = true, val isHighlightFullBar: Boolean = false, val popUpLabel: (Float, Float) -> String = { x, y ->
val xLabel = "x : ${x.toInt()} "
val yLabel = "y : ${String.format("%.2f", y)}"
"$xLabel $yLabel"
}, val drawPopUp: DrawScope.(Offset, BarData, Float, Float, BarChartType) -> Unit = { selectedOffset, identifiedPoint, centerPointOfBar, selectedXAxisWidth, barChartType ->
val highlightTextPaint = TextPaint().apply {
textSize = highlightTextSize.toPx()
color = highlightTextColor.toArgb()
textAlign = highlightLabelAlignment
typeface = highlightTextTypeface
}
val label = popUpLabel(identifiedPoint.point.x, identifiedPoint.point.y)
drawContext.canvas.nativeCanvas.apply {
val x =
if (barChartType == BarChartType.VERTICAL) centerPointOfBar else selectedXAxisWidth + highlightTextOffset.toPx()
val y =
if (barChartType == BarChartType.VERTICAL) selectedOffset.y else centerPointOfBar
val background = getTextBackgroundRect(
x,
y,
label,
highlightTextPaint
)
drawRoundRect(
color = highlightTextBackgroundColor,
topLeft = Offset(
background.left.toFloat(),
if (barChartType == BarChartType.VERTICAL) background.top.toFloat() - highlightTextOffset.toPx() else (y - background.height() / 2)
),
size = Size(background.width().toFloat(), background.height().toFloat()),
alpha = highlightTextBackgroundAlpha,
cornerRadius = highlightPopUpCornerRadius,
colorFilter = backgroundColorFilter,
blendMode = backgroundBlendMode,
style = backgroundStyle
)
val drawTextX =
if (barChartType == BarChartType.VERTICAL) centerPointOfBar else selectedXAxisWidth + highlightTextOffset.toPx()
val drawTextY =
if (barChartType == BarChartType.VERTICAL) selectedOffset.y - highlightTextOffset.toPx() else (y + background.height() / 2) - (highlightTextPaint.fontMetrics.descent)
drawText(
label,
drawTextX,
drawTextY,
highlightTextPaint
)
}
}, val drawHighlightBar: DrawScope.(Float, Float, Float, Float, BarChartType) -> Unit = { x, y, width, height, barChartType ->
val rectWidth = if (barChartType == BarChartType.VERTICAL) width else height
val rectHeight = if (barChartType == BarChartType.VERTICAL) height else width
drawRoundRect(
color = highlightBarColor,
topLeft = Offset(x, y),
size = Size(rectWidth, rectHeight),
cornerRadius = CornerRadius(
highlightBarCornerRadius.toPx(),
highlightBarCornerRadius.toPx()
),
style = Stroke(width = highlightBarStrokeWidth.toPx())
)
}, val groupBarPopUpLabel: (String, Float) -> String = { name, value ->
val xLabel = "Name : $name "
val yLabel = "Value : ${String.format("%.2f", value)}"
"$xLabel $yLabel"
}, val drawGroupBarPopUp: DrawScope.(Offset, BarData, Float) -> Unit = { selectedOffset, identifiedPoint, centerPointOfBar ->
val highlightTextPaint = TextPaint().apply {
textSize = highlightTextSize.toPx()
color = highlightTextColor.toArgb()
textAlign = highlightLabelAlignment
typeface = highlightTextTypeface
}
val xLabel = "${identifiedPoint.point.x.toInt()}"
val label = groupBarPopUpLabel(xLabel, identifiedPoint.point.y)
drawContext.canvas.nativeCanvas.apply {
val background = getTextBackgroundRect(
centerPointOfBar,
selectedOffset.y,
label,
highlightTextPaint
)
drawRoundRect(
color = highlightTextBackgroundColor,
topLeft = Offset(
background.left.toFloat(),
background.top.toFloat() - highlightTextOffset.toPx()
),
size = Size(background.width().toFloat(), background.height().toFloat()),
alpha = highlightTextBackgroundAlpha,
cornerRadius = highlightPopUpCornerRadius,
colorFilter = backgroundColorFilter,
blendMode = backgroundBlendMode,
style = backgroundStyle
)
drawText(
label,
centerPointOfBar,
selectedOffset.y - highlightTextOffset.toPx(),
highlightTextPaint
)
}
}, val barChartType: BarChartType = BarChartType.VERTICAL)
Used to customise the highlighted text and the bar
Functions
Link copied to clipboard
fun drawBarGraph(drawScope: DrawScope, barData: BarData, drawOffset: Offset, height: Float, barChartType: BarChartType, barStyle: BarStyle)
Used to draw the individual bars
Link copied to clipboard
fun drawGroupBarGraph(drawScope: DrawScope, barGraphData: GroupBarChartData, barStyle: BarStyle, drawOffset: Offset, height: Float, barColor: Color, barIndex: Int)
Used to draw the individual barUsed round rec as a default shape