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>, entryModel: LineChartEntryModel
    ) {
        //每次加载数据都初始化折线图
        chart.init(BaseApplication.obtainInstance())
        if (entryModel.entries.isEmpty()) {
            chart.clearValues()
            return
        }
        //绑定数据
        val lineDataSets: MutableList<ILineDataSet> = ArrayList()
        //设置数据
        val dataSet = LineDataSet(entryModel.entries, entryModel.entries[0].data.toString())
        dataSet.setDrawCircles(true)
        //线条颜色
        dataSet.color = entryModel.lineColor
        //圆点颜色
        dataSet.setCircleColor(entryModel.lineColor)
        dataSet.setDrawFilled(true)
        dataSet.fillColor = entryModel.lineColor
        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.labelRotationAngle = -45f
        xAxis.valueFormatter = object : ValueFormatter() {
            override fun getFormattedValue(value: Float): String {
                return xAxisDate[value.toInt()]
            }
        }
        chart.data = lineData
        chart.invalidate()
    }
}