gpt4 book ai didi

android - 条值的自定义位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:03:06 24 4
gpt4 key购买 nike

我正在使用 MPAndroidChart用于创建条形图的库。

我们可以使用以下代码在条形图顶部显示条形图值。

mChart.setDrawValueAboveBar(false);

或者我们可以使用这个:

barDataSet.setDrawValues(true);

在条形图本身内显示条形图值。我想知道我们是否可以为值设置自定义位置。例如在 y 轴下方。

enter image description here

解决方案

public class TextBarChartRenderer extends BarChartRenderer {

public TextBarChartRenderer(BarDataProvider chart, ChartAnimator animator, ViewPortHandler viewPortHandler) {
super(chart, animator, viewPortHandler);
}

@Override
public void drawValues(Canvas c) {
List<IBarDataSet> dataSets = mChart.getBarData().getDataSets();

final float valueOffsetPlus = Utils.convertDpToPixel(22f)
float negOffset;

for (int i = 0; i < mChart.getBarData().getDataSetCount(); i++) {

IBarDataSet dataSet = dataSets.get(i);
applyValueTextStyle(dataSet);
float valueTextHeight = Utils.calcTextHeight(mValuePaint, "8");
negOffset = valueTextHeight + valueOffsetPlus;

BarBuffer buffer = mBarBuffers[i];

float left;
float right;
float top;
float bottom;

for (int j = 0; j < buffer.buffer.length * mAnimator.getPhaseX(); j += 4) {

left = buffer.buffer[j];
right = buffer.buffer[j + 2];
top = buffer.buffer[j + 1];
bottom = buffer.buffer[j + 3];

float x = (left + right) / 2f;

if (!mViewPortHandler.isInBoundsRight(x))
break;

if (!mViewPortHandler.isInBoundsY(top) || !mViewPortHandler.isInBoundsLeft(x))
continue;

BarEntry entry = dataSet.getEntryForIndex(j / 4);
float val = entry.getY();

if(val > 0) {
drawValue(c, dataSet.getValueFormatter(), val, entry, i, x,
(bottom + negOffset),
dataSet.getValueTextColor(j / 4));
}
}
}

}
}

还必须添加这个以便值可见

mChart.setExtraOffsets(0, 0, 0, 20);

最佳答案

公开的 API 中没有方法可以将值标签的位置更改为 YAxis 下方。您可能需要扩展和修改该库以满足您不常见的要求。

尝试的一个选项是在 X 轴上实现 IAxisValueFormatter 以呈现 y 值而不是 x 值。一个简单的例子可以重新使用现有的 IndexAxisValueFormatter .假设您在名为 yLabelsString [] 中拥有 y 值的标签。您现在可以这样做:

mChart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(yLabels));

如果这不起作用,您将不得不查看 BarChartRenderer 的源代码.有一个名为 drawValues() 的方法,您可以重写该方法以实现您想要的效果。

所以你会有这样的东西:

public class MyBarChartRenderer extends BarChartRenderer {

//TODO: a constructor matching the superclass

@Override
public void drawValues(Canvas c) {
//TODO: copy and paste the code from the superclass and simply
//change the offset for drawing the labels
}
}

关于android - 条值的自定义位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41444573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com