How To Display Available And Unavailable Slots In A Horizontal Bar Graph In Android
I am trying to display the available and unavailable slots on a horizontal bar graph, but not able to find a solution to that. The values coming from server are like this: start_ti
Solution 1:
The correct way of achieving the above graph is using Stacked Bar graph and HorizontalBarChart component of MpAndroidChart
Note: I will be linking the project with the sample output shown in the above diagram. Check the comments section for the link. Run
HorizontalStackedBarGraph.kt
activity to try the solution. The code written below is commented to give you an idea as to how you can implement it in your project.
Paste the above code in your activity XML
<com.github.mikephil.charting.charts.HorizontalBarChart
android:id="@+id/timetable_barchart"
android:layout_marginBottom="40dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
classHorizontalStackedBarGraph : AppCompatActivity() {
val startTime = 9fval EXTRA_GRAPH_SIZE = 3// In Horizontal graph Bar width will set your graph height.val BAR_WIDTH = 0.3F// Calculate the time interval and create an arrayval entries = floatArrayOf(2f, 1f, 3f, 3f, 1f, 2f)
overridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_horizontal_stacked_bar_graph)
val barChart = findViewById<BarChart>(R.id.timetable_barchart);
// Add the list of values to a single BarEntryval timeTableEntries = BarEntry(0f, entries)
val set1 = BarDataSet(listOf(timeTableEntries), "TimeTable")
set1.setColors(intArrayOf(R.color.colorAvailableSlot, R.color.colorUnAvailableSlot), this)
set1.setDrawValues(false)
val barData = BarData(set1)
barData.barWidth = BAR_WIDTH
barChart.data = barData
barChart.description.isEnabled = falseval legend1= LegendEntry().apply {
formColor = ContextCompat.getColor(this@HorizontalStackedBarGraph, R.color.colorAvailableSlot)
label = "Unavailable Slot"
}
val legend2= LegendEntry().apply {
formColor = ContextCompat.getColor(this@HorizontalStackedBarGraph, R.color.colorUnAvailableSlot)
label = "Available Slot"
}
val valueFormatterForTime = object : ValueFormatter() {
overridefungetFormattedValue(value: Float): String {
return getString(R.string.time, (startTime + value).toInt())
}
}
//Bar graph customization
barChart.extraBottomOffset = 20f
barChart.legend.xEntrySpace = 10f
barChart.legend.setCustom(arrayListOf(legend1, legend2))
barChart.axisRight.apply {
setDrawGridLines(false)
granularity = 1f
valueFormatter = valueFormatterForTime
labelCount = entries.size + EXTRA_GRAPH_SIZE
}
barChart.axisLeft.isEnabled = false
barChart.xAxis.isEnabled = false
barChart.xAxis.axisMinimum = 0f
barChart.setDrawGridBackground(false)
barChart.setDrawBarShadow(false)
barChart.setDrawValueAboveBar(false)
barChart.invalidate()
}
}
Post a Comment for "How To Display Available And Unavailable Slots In A Horizontal Bar Graph In Android"