MPAndroidChart中如何让X轴与Y轴刻度间距长度相等?
实现MPAndroidChart LineChart网格正方形(刻度间距一致)
要让X轴和Y轴刻度间的像素长度一致,核心是让单位数值对应的像素长度在X、Y轴上相等。既然你已经固定了X/Y轴的最大最小值,只需根据图表实际绘制区域调整缩放比例即可,具体实现步骤如下:
先获取X轴和Y轴的数值范围:
float xRange = xAxis.getAxisMaximum() - xAxis.getAxisMinimum(); float yRange = yAxis.getAxisMaximum() - yAxis.getAxisMinimum();监听LineChart的布局完成事件(宽高设为match_parent时,必须等布局完成才能拿到实际可用绘制区域尺寸):
lineChart.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // 只执行一次,避免重复触发 lineChart.getViewTreeObserver().removeOnGlobalLayoutListener(this); // 获取图表去掉轴、边距后的实际绘制区域 RectF contentRect = lineChart.getContentRect(); float chartWidth = contentRect.width(); float chartHeight = contentRect.height(); // 计算X、Y方向上单位数值对应的像素比例 float xScale = chartWidth / xRange; float yScale = chartHeight / yRange; // 取较小的缩放比例,保证完整显示数据范围的同时,让刻度像素间距一致 float targetScale = Math.min(xScale, yScale); // 计算偏移量,让图表在容器中居中显示 float newChartWidth = xRange * targetScale; float newChartHeight = yRange * targetScale; float offsetX = (chartWidth - newChartWidth) / 2f; float offsetY = (chartHeight - newChartHeight) / 2f; // 设置视口调整图表显示范围和位置 Matrix matrix = new Matrix(); matrix.postTranslate(offsetX, offsetY); matrix.postScale(targetScale, targetScale); lineChart.getViewPortHandler().refresh(matrix, lineChart, true); // 刷新图表生效 lineChart.invalidate(); } });额外注意事项:
- 若图表支持手势缩放,建议禁用或调整手势逻辑,防止用户操作后破坏正方形网格
- 可通过
xAxis.setLabelCount(int count, boolean force)和yAxis.setLabelCount(int count, boolean force)强制设置刻度数量,保证数值维度上的刻度间距均匀
内容的提问来源于stack exchange,提问作者yikfrl
相关产品推荐
相关产品推荐

