Newer
Older
CasicSmartTube / app / src / main / java / com / casic / smarttube / utils / ChartViewHelper.kt
package com.casic.smarttube.utils

import com.casic.smarttube.R
import com.casic.smarttube.extensions.init
import com.casic.smarttube.widgets.LineChartMarkerView
import com.github.mikephil.charting.charts.LineChart
import com.github.mikephil.charting.data.Entry
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.convertColor


/**
 * @author a203
 * @description 各种图初始化配置类
 * @date 2022/2/15 16:24
 * @email 290677893@qq.com
 */
object ChartViewHelper {
    /**
     * 折线图
     * */
    fun setLineChartData(
        chart: LineChart, xAxisDate: MutableList<String>, entries: List<Entry>
    ) {
        //每次加载数据都初始化折线图
        chart.init(xAxisDate.size)
        if (entries.isEmpty()) {
            return
        }
        //绑定数据
        val lineDataSets: MutableList<ILineDataSet> = ArrayList()
        //设置数据
        val dataSet = LineDataSet(entries, entries[0].data.toString())
        dataSet.setDrawCircles(true)
        //圆点颜色
        dataSet.setCircleColor(R.color.redTextColor.convertColor(chart.context))
        //线条颜色
        dataSet.color = R.color.redTextColor.convertColor(chart.context)
        dataSet.setDrawFilled(false)
//        dataSet.fillColor = R.color.redTextColor.convertColor(chart.context)
        dataSet.mode = LineDataSet.Mode.CUBIC_BEZIER
        lineDataSets.add(dataSet)

        val lineData = LineData(lineDataSets)
        lineData.setDrawValues(false)
        //添加自定义Marker
        val markerView = LineChartMarkerView(chart.context)
        markerView.chartView = chart
        markerView.setXAxisDate(xAxisDate)
        chart.marker = markerView
        //设置X轴坐标
        val xAxis = chart.xAxis
        xAxis.valueFormatter = object : ValueFormatter() {
            override fun getFormattedValue(value: Float): String {
                return if (xAxisDate.size == 1) {
                    xAxisDate[0]
                } else {
                    xAxisDate[value.toInt()]
                }
            }
        }
        chart.data = lineData
        chart.invalidate()
    }
}