Android使用MPChart库实现折线图时如何标注最大值和最小值
MPAndroidChart 折线图标注最大最小值实现方案

实现逻辑如下:
- 先遍历折线数据源,筛选出最大值、最小值
- 自定义数值格式化器,仅在匹配到最大最小值的点位返回数值文本,其余点位返回空
- 配置圆点绘制规则,仅在最大最小值点位显示可见圆点,其余点位透明
- 保留原有折线填充、高亮等配置即可
修改后的完整代码:
// 遍历数据源获取最大、最小值 var maxValue = -Float.MAX_VALUE var minValue = Float.MAX_VALUE values.forEach { entry -> if (entry.y > maxValue) maxValue = entry.y if (entry.y < minValue) minValue = entry.y } val lineDataSet = LineDataSet(values, "") lineDataSet.lineWidth = 2f lineDataSet.setDrawValues(true) lineDataSet.setDrawFilled(true) lineDataSet.color = resources.getColor(R.color.green) lineDataSet.highLightColor = resources.getColor(R.color.coral) // 开启圆点绘制 lineDataSet.setDrawCircles(true) lineDataSet.circleHoleRadius = 5f lineDataSet.circleRadius = 6f // 配置数值格式化规则,仅最大最小值显示文本 lineDataSet.valueFormatter = object : ValueFormatter() { override fun getPointLabel(entry: Entry?): String { entry ?: return "" return if (entry.y == maxValue || entry.y == minValue) { // 按需调整数值格式化规则,比如保留1位小数 String.format("%.1f", entry.y) } else { "" } } } // 配置数值文本样式 lineDataSet.valueTextSize = 12f lineDataSet.valueTextColor = resources.getColor(R.color.green) // 配置圆点显示规则,仅最大最小值点位可见 lineDataSet.circleColors = object : ArrayList<Int>() { override fun get(index: Int): Int { val entry = values[index] return if (entry.y == maxValue || entry.y == minValue) { resources.getColor(R.color.green) // 如需区分最大最小值颜色可拆分判断: // if(entry.y == maxValue) Color.RED else Color.BLUE } else { Color.TRANSPARENT } } } val elevationMarker = ChartMarkerView2(activity) binding!!.chart.markerView = elevationMarker lineDataSet.setDrawHighlightIndicators(true) lineDataSet.setDrawHorizontalHighlightIndicator(false) lineDataSet.setDrawCircleHole(true) val drawable = ContextCompat.getDrawable(requireContext(), R.drawable.fade_graph_bg) lineDataSet.fillDrawable = drawable lineDataSet.axisDependency = YAxis.AxisDependency.LEFT val dataSets = ArrayList<ILineDataSet>() dataSets.add(lineDataSet) val data = LineData(dataSets) binding!!.chart.data = data binding!!.chart.invalidate()
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

