kotlin MPAndroidChart barchart的实现

555 阅读1分钟

效果如此 在这里插入图片描述

首先,在build.gradle(project)里添加如下两行 在这里插入图片描述 然后在build.gradle(module)里添加如下一行, 在这里插入图片描述 然后在activity_main.xml 里添加

   <com.github.mikephil.charting.charts.BarChart
                android:id="@+id/bar_chart"
                android:layout_width="1200dp"
                android:layout_height="400dp" />

然后在mianactivity里

import android.annotation.SuppressLint
import android.graphics.Color
import android.os.Bundle
import android.view.View.OnTouchListener
import androidx.appcompat.app.AppCompatActivity
import com.github.mikephil.charting.charts.BarChart
import com.github.mikephil.charting.components.AxisBase
import com.github.mikephil.charting.components.MarkerView
import com.github.mikephil.charting.components.XAxis
import com.github.mikephil.charting.data.BarData
import com.github.mikephil.charting.data.BarDataSet
import com.github.mikephil.charting.data.BarEntry
import com.github.mikephil.charting.formatter.IAxisValueFormatter
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {
    private var mBarChart: BarChart? = null
    private var mBarData: BarData? = null
    private var xValues: ArrayList<String>? = null
    var mMap = mutableMapOf<String,String>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mBarChart = findViewById<BarChart>(R.id.bar_chart)
        addData()
        initData()
        setLegend()
        setXAxis()
        setMRAxis()
    }
    fun addData(){//制作假数据
        for (x in 0..20) {
            val y = (Math.random() * 30).toFloat()
            mMap.put("08-" + (x + 1).toString(),y.toString())
        }
    }
    private fun initData() {//初始化数据
        val yValues = java.util.ArrayList<BarEntry>()
        xValues = ArrayList()
        var count=0
        for (en in mMap){
            yValues.add(BarEntry(count.toFloat(), en.value.toFloat()))
            xValues!!.add(en.key)
            count+=1
        }
        val barDataSet = BarDataSet(yValues, "条形图")
        barDataSet.color = Color.parseColor("#99D9BE")//设置条形图的颜色值
        barDataSet.highLightColor = Color.rgb(39, 211, 138)//设置被选中的颜色值
        barDataSet.setDrawValues(false)//不设置条形图上的数字显示
        mBarData = BarData(barDataSet)
    }

    fun setLegend() {//设置legend相关内容
        mBarChart!!.description.isEnabled = false//不设置描述
        mBarChart!!.data = mBarData
        mBarChart!!.setDrawMarkers(true)
        mBarChart!!.setScaleEnabled(false)
        mBarChart!!.minOffset = 1f
        mBarData!!.barWidth = 0.2f
        mBarChart!!.legend.isEnabled = false//设置legend
    }

    fun setXAxis(){//x轴相关设置
        val xAxis: XAxis = mBarChart!!.xAxis
        xAxis.position = XAxis.XAxisPosition.BOTTOM
        xAxis.setDrawGridLines(false)
        xAxis.textSize = 10f
        xAxis.axisLineColor = Color.parseColor("#E5E5E5")//设置x轴的颜色
        xAxis.labelCount = xValues!!.count()
        xAxis.position = XAxis.XAxisPosition.BOTTOM // 位于底部
        xAxis.setDrawGridLines(false) // 不绘制X轴网格线
        xAxis.textSize = 14f // 文本大小14
        xAxis.valueFormatter = object : IAxisValueFormatter {
            override fun getFormattedValue(value: Float, axis: AxisBase): String {
                return java.lang.String.valueOf(xValues!![value.toInt()])
            }
            override fun getDecimalDigits(): Int {
                return 0
            }
        }
    }

    private fun setMRAxis() {//y轴相关设置
        val mRAxis = mBarChart!!.axisRight
        mRAxis.isEnabled = false
        val mLAxis = mBarChart!!.axisLeft
        mLAxis.setDrawAxisLine(false)
        mLAxis.setDrawGridLines(false)
        mBarChart!!.requestLayout()
    }
}