[MPAndroidChart] 数据都为0,点击图表不同点时,只能在最后一个点展示MarkerView

文章描述了一个在Android应用中处理LineChart的问题,当数据全为0时,y轴最大值设为0导致MarkerView无法正常显示。作者通过调整代码,确保在y轴最大值不为0时正确设置轴的最大限制,从而解决了问题,现在MarkerView能正常在选择的点上显示。

原先是依次遍历数据,找出数据集中的最大值赋值,然后设置y轴的最高点。但是如果所有数据都为0时,y轴最大值为0,点击中间的坐标点展示MarkerView都只会在最后一个点展示MarkerView。

 

private fun setStoreLineData(chartView: LineChart, storeDatas: List<StoreTrendModel>) {
        val chartEntrys = ArrayList<Entry>()

        var maxXValue = (storeDatas!!.size - 1).toFloat() //记录最大的x数值
        var maxYValue = 0f //记录最大的y数值
        xDatasList.clear() 
        for (i in 0 until storeDatas!!.size) {
            xDatasList.add(storeDatas!![i].timestamp.toLong()) // 将日期存到一个时间戳列表里
            // 计算最大值
            if (maxYValue <= storeDatas!![i].storeCount) {
                maxYValue = storeDatas!![i].storeCount.toFloat()
            }
            // 设置趋势图数据
            chartEntrys.add(Entry(i.toFloat(),storeDatas!![i].storeCount.toFloat()))
        }

        chartView.xAxis.axisMinimum = 0f
        chartView.xAxis.axisMaximum = maxXValue
        chartView.axisLeft.axisMinimum = 0f
        // chartView.axisLeft.axisMaximun = maxYValue // 这么写,如果y轴最大值为0时,markerView不能正常显示!!
        if (maxYValue != 0f) {
            binding.lcPerformance.axisLeft.axisMaximum = maxYValue // 这样写就对了
        }
        // create marker to display box when values are selected
        val xValueFormatter = DateAxisValueFormatter(xDatasList,true)
        mv = PerformanceHintMarkerView(context,xValueFormatter,binding.lcPerformance,storeLineName, true)
        // Set the marker to the lineChart
        mv!!.chartView = binding.lcPerformance
        chartView.marker = mv
        chartView.setDrawMarkers(false)
        binding.lcPerformance.notifyDataSetChanged()
        binding.lcPerformance.invalidate()
        binding.lcPerformance.animateX(1000)
    }

修改后MarkerView可以正常显示

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值