MPAndroidChart
MPAndroidChart copied to clipboard
need to fix the laggy chart
i am facing an issue in the line chart . i am receiving an shortarray and i need to plot them in the chart. I am shortarray which consist of 122 elements and i am receiving 60 shortarray i a second . i was able to plot them in my chart. due to heavy work in my ui thread . the chart lag
private fun graph(byteArray: ShortArray?) { val values = ArrayList<Entry>() var set1: LineDataSet? = null for (i in 0 until byteArray?.size!!) {
byteArray.get(i)?.let { Entry(num.toFloat(), it.toFloat() ) }?.let { values.add(it) }
num++
}
if (lineChart.data != null && lineChart.data.dataSetCount > 0) {
set1 = lineChart.data.getDataSetByIndex(0) as LineDataSet
while (set1.values.size >= 20000){
set1.values.removeAt(0)
}
set1.values.plusAssign(values)
set1.notifyDataSetChanged()
lineChart.data.notifyDataChanged()
lineChart.notifyDataSetChanged()
lineChart.invalidate()
}
else {
set1 = LineDataSet(values, "Audio Data")
set1.setDrawIcons(false)
set1.color = Color.rgb(255,115,115)
// set1.enableDashedLine(10f, 5f, 0f) set1.setDrawCircles(false) set1.color = Color.BLACK // set1.setCircleColor(Color.BLACK)
set1.lineWidth = 1f
// set1.circleRadius = 3f
set1.setDrawCircleHole(false)
set1.formLineWidth = 1f
// set1.formLineDashEffect = DashPathEffect(floatArrayOf(10f, 5f), 0f) set1.formSize = 15f
set1.valueTextSize = 9f
// set1.enableDashedHighlightLine(100f, 100f, 0f)
// set1.setDrawFilled(true) set1.fillFormatter = IFillFormatter { dataSet, dataProvider -> lineChart.getAxisLeft().getAxisMinimum() }
val dataSets: ArrayList<ILineDataSet> = ArrayList()
dataSets.add(set1)
val data = LineData(dataSets)
data.notifyDataChanged()
lineChart.data = data
lineChart.notifyDataSetChanged()
lineChart.invalidate()
}
}
private fun graph(byteArray: ShortArray?) { val values = ArrayList() var set1: LineDataSet? = null for (i in 0 until byteArray?.size!!) { byteArray.get(i)?.let { Entry(num.toFloat(), it.toFloat()) }?.let { values.add(it) } num++ } if (lineChart.data != null && lineChart.data.dataSetCount > 0) { set1 = lineChart.data.getDataSetByIndex(0) as LineDataSet while (set1.values.size >= 20000) { set1.values.removeAt(0) } set1.values.plusAssign(values) set1.notifyDataSetChanged() lineChart.data.notifyDataChanged() lineChart.notifyDataSetChanged() lineChart.invalidate() } else { set1 = LineDataSet(values, "Audio Data") set1.setDrawIcons(false) set1.color = Color.rgb(255, 115, 115) // set1.enableDashedLine(10f, 5f, 0f) set1.setDrawCircles(false) set1.color = Color.BLACK // set1.setCircleColor(Color.BLACK) set1.lineWidth = 1f // set1.circleRadius = 3f set1.setDrawCircleHole(false) set1.formLineWidth = 1f // set1.formLineDashEffect = DashPathEffect(floatArrayOf(10f, 5f), 0f) set1.formSize = 15f set1.valueTextSize = 9f // set1.enableDashedHighlightLine(100f, 100f, 0f) // set1.setDrawFilled(true) set1.fillFormatter = IFillFormatter { dataSet, dataProvider -> lineChart.getAxisLeft().getAxisMinimum() } val dataSets: ArrayList<ILineDataSet> = ArrayList() dataSets.add(set1) val data = LineData(dataSets) data.notifyDataChanged() lineChart.data = data lineChart.notifyDataSetChanged() lineChart.invalidate() } }
it's draw ui or data processing time consuming multi thread maybe for you