MPAndroidChart点击图表条目高亮错误,无需本地修改库的解决方案?
问题根因
该问题是MPAndroidChart中getEntryForXValue方法的默认匹配逻辑缺陷导致的:
- 当同一个X值对应多个Entry时,旧版本库的该方法不会遍历所有相同X的Entry查找全局最接近目标Y的条目,而是匹配到第一个差值小于后续条目的Entry就提前终止遍历
- 你当前相同X的Entry按Y值升序排列(98.1→101.3→103.8),遍历到101.3时触发了提前终止逻辑,所以即使目标Y是103.8也会返回101.3的条目
无需修改库的解决方案
调整Entry插入顺序
将相同X值的Entry按Y值降序排列后再添加到DataSet中,调整为103.8→101.3→98.1的顺序后,匹配103.8时会优先遍历到正确条目,不会被中间值截断匹配逻辑。自定义手动匹配逻辑
不直接依赖库返回的Entry,通过Highlight返回的正确参数自行匹配条目,示例代码如下:chart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { @Override public void onValueSelected(Entry e, Highlight h) { float targetX = h.getX(); float targetY = h.getY(); Entry correctEntry = null; float minDiff = Float.MAX_VALUE; // 遍历当前X对应的所有Entry找全局最接近的 for (Entry entry : dataSet.getEntriesForXValue(targetX)) { float diff = Math.abs(entry.getY() - targetY); if (diff < minDiff) { minDiff = diff; correctEntry = entry; } } // 后续使用correctEntry执行业务逻辑 } @Override public void onNothingSelected() { // 原有逻辑保持不变 } });开启同X值Y排序配置
3.1.0及以上版本的MPAndroidChart支持调用dataSet.setSortYValuesForSameX(true),开启后相同X的Entry会自动按Y值排序,匹配时会遍历所有条目找到全局最接近的Y值。
内容的提问来源于stack exchange,提问作者Kiskunk
相关产品推荐
相关产品推荐

