package com.casic.smarttube.utils import com.casic.smarttube.base.BaseApplication import com.casic.smarttube.model.LineChartEntryModel import com.casic.smarttube.widgets.LineChartMarkerView import com.github.mikephil.charting.charts.LineChart import com.github.mikephil.charting.data.LineData import com.github.mikephil.charting.data.LineDataSet import com.github.mikephil.charting.formatter.ValueFormatter import com.github.mikephil.charting.interfaces.datasets.ILineDataSet import com.pengxh.kt.lite.extensions.init /** * @author a203 * @description 各种图初始化配置类 * @date 2022/2/15 16:24 * @email 290677893@qq.com */ object ChartViewHelper { /** * 折线图 * */ fun setLineChartData( chart: LineChart, xAxisDate: MutableList<String>, entryModels: List<LineChartEntryModel> ) { //每次加载数据都初始化折线图 chart.init(BaseApplication.obtainInstance()) //[{"entryList":[],"lineColor":-13118290}] if (entryModels[0].entryList?.isEmpty() == true) { chart.clearValues() return } //绑定数据 val lineDataSets: MutableList<ILineDataSet> = ArrayList() val entrySize = entryModels[0].entryList!!.size entryModels.forEachIndexed { index, it -> //设置数据 val dataSet = if (entrySize == 1) { LineDataSet(it.entryList, it.entryList?.get(0)?.data.toString()) } else { LineDataSet(it.entryList, it.entryList?.get(index)?.data.toString()) } dataSet.setDrawCircles(true) //线条颜色 dataSet.color = it.lineColors[index] //圆点颜色 dataSet.setCircleColor(it.lineColors[index]) dataSet.setDrawFilled(true) dataSet.fillColor = it.lineColors[index] dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER lineDataSets.add(dataSet) } val lineData = LineData(lineDataSets) lineData.setDrawValues(false) //添加自定义Marker val markerView = LineChartMarkerView(BaseApplication.obtainInstance()) markerView.chartView = chart markerView.setXAxisDate(xAxisDate) chart.marker = markerView //设置X轴坐标 val xAxis = chart.xAxis xAxis.valueFormatter = if (entrySize == 1) { object : ValueFormatter() { override fun getFormattedValue(value: Float): String { return xAxisDate[0] } } } else { object : ValueFormatter() { override fun getFormattedValue(value: Float): String { return xAxisDate[value.toInt()] } } } chart.data = lineData chart.invalidate() } }