MPAndroidChart 3.1.0 柱状图使用

博客介绍了安卓图形MPAndroidChart3.0中柱状图的使用,包含导入依赖库、xml使用和代码方面内容,还给出了详细学习参考链接,涉及安卓和Kotlin技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 效果图

 导入依赖库

//数学图表
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'

xml使用

             <com.github.mikephil.charting.charts.BarChart
                android:id="@+id/recordBarchart"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_marginHorizontal="@dimen/dp_10"
                android:layout_marginBottom="@dimen/dp_10"/>

 代码

    fun initBarChart(thisMonthToWeekFlowList : List<Long> ) {

        val entries = ArrayList<BarEntry>()//柱状图填充的数据,BarEntry()类第一个参数作用类似于索引,第二参数就是索引对应的值
        val xAxisTextList = ArrayList<String>() //x轴每个柱子下显示的文本列表

        var maxDataUsage = 0f
        for (i in 0 until thisMonthToWeekFlowList.size) {
            val dataUsage = FlowUtils.getByteFromMb(thisMonthToWeekFlowList[i])
            entries.add(BarEntry((i.toFloat()), dataUsage))
            xAxisTextList.add(
                when(i){
                    0 -> "第一周"
                    1 -> "第二周"
                    2 -> "第三周"
                    3 -> "第四周"
                    4 -> "第五周"
                    5 -> "第六周"
                    else -> "无效周"
                }.toString()
            )

            if (dataUsage > maxDataUsage) {
                maxDataUsage = dataUsage
            }
        }

        if (maxDataUsage == 0f) {
            binding.noUseFlowLayout.visibility = View.VISIBLE
            binding.showAllAppUseFlowDataLayot.visibility = View.GONE
            return
        } else {
            binding.noUseFlowLayout.visibility = View.GONE
            binding.showAllAppUseFlowDataLayot.visibility = View.VISIBLE
        }

        val dataSet = BarDataSet(entries, "流量消耗数")
        dataSet.color = ContextCompat.getColor(requireContext(), R.color.color_88D7ED)
        val data = BarData(dataSet)
        data.setBarWidth(0.5f)//每个柱子的宽度 0~1f

        binding.recordBarchart.description.isEnabled = false //关闭描述
        binding.recordBarchart.legend.isEnabled = false  //关闭图例

        val xAxis: XAxis = binding.recordBarchart.xAxis
        xAxis.granularity = 1F
        xAxis.setLabelCount(xAxisTextList.size) //设置X标签个数
        xAxis.position = XAxis.XAxisPosition.BOTTOM // 设置 X 轴位置在底部

        xAxis.valueFormatter = IndexAxisValueFormatter(xAxisTextList)

        val yAxis: YAxis = binding.recordBarchart.axisLeft
        yAxis.axisMinimum = 0f // Y 轴最小值

        val numData = getNumData(maxDataUsage)

        yAxis.axisMaximum = numData["num"]!!.toFloat() // Y 轴最大值
        yAxis.granularity = numData["size"]!!.toFloat() // Y 轴间隔
        yAxis.setDrawGridLines(false) // 禁用网格线

        // 设置Y轴值格式化器
        yAxis.setValueFormatter(object : ValueFormatter() {
            override fun getFormattedValue(value: Float): String {
                return "${value.toInt()} MB" // 在Y轴添加"MB"
            }
        })

        // 不显示竖线
        binding.recordBarchart.xAxis.setDrawGridLines(false)
        // 禁用右侧 Y 轴
        binding.recordBarchart.axisRight.isEnabled = false
        binding.recordBarchart.setTouchEnabled(false)  //关闭触摸事件

        binding.recordBarchart.data = data
        binding.recordBarchart.invalidate()
    }



//动态设置Y轴的最大值和间隔  
    fun getNumData(i : Float) : HashMap<String,Int>{
        val numMap = HashMap<String,Int>()
        when{
            i<=10 ->{
                numMap["num"] = 10
                numMap["size"] = 1
            }
            i<=100 ->{
                numMap["num"] = i.toInt()/10 *10 +10
                numMap["size"] = 10
            }
            i<=1000 -> {
                numMap["num"] = i.toInt()/100 *100 +100
                numMap["size"] = 100
            }else ->{
            numMap["num"] = i.toInt()/1000 *1000 +1000
            numMap["size"] = 1000
        }
        }
        return numMap
    }

 详细可以去这里学:

安卓图形之MPAndroidChart3.0详解三——柱状图(一)(属性篇)_mpandroidchart 柱状图-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唉盆u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值