Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / utils / ChartViewHelper.kt
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()
    }
}