gpt4 book ai didi

android - MPAndroidChart : Is it possible to rotate value labels for a given DataSet?

转载 作者:行者123 更新时间:2023-11-30 00:49:27 25 4
gpt4 key购买 nike

在我的 Android 应用程序中,我有一个使用 MPAndroidChart 制作的条形图。我的问题是当条形图中有多个条形时,每个条形上方的值标签与其他值标签重叠,如下面的屏幕截图所示。我知道这是因为没有显示标签的空间,但我认为如果可以像屏幕截图中的 XAxis 标签那样将值标签旋转 90 度,就可以避免这种情况。那可能吗?如果我放大,那么我可以清楚地看到所有值。我正在使用 MPAndroidChart v3.0.1。

MPAndroid Chart

下面是我的代码。

        yVals1 = new ArrayList<BarEntry>();
xVals = new ArrayList<String>();
for (int i = 0; i < listChart.size(); i++){
BarEntry newBEntry = new BarEntry(i,listChart.get(i).getAmount());
xVals.add(listChart.get(i).getAltName());
yVals1.add(newBEntry);
}
BarDataSet set1;
if (bChartRepOne.getData() != null && bChartRepOne.getData().getDataSetCount() > 0) {
set1 = (BarDataSet) bChartRepOne.getData().getDataSetByIndex(0);
set1.setValues(yVals1);
bChartRepOne.getData().notifyDataChanged();
bChartRepOne.notifyDataSetChanged();
} else {
set1 = new BarDataSet(yVals1, chart);
set1.setColors(ColorTemplate.MATERIAL_COLORS);
ArrayList<IBarDataSet> dataSets = new ArrayList<IBarDataSet>();
dataSets.add(set1);
BarData data = new BarData(dataSets);
data.setValueTextSize(8f);

bChartRepOne.setData(data);
}

XAxis xAxis = bChartRepOne.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setDrawGridLines(false);
xAxis.setLabelCount(xList.size()-1);
xAxis.setGranularity(1f); // only intervals of 1 day
xAxis.setValueFormatter(new IAxisValueFormatter() {
@Override
public String getFormattedValue(float value, AxisBase axis) {
if(Math.round(value) >= xList.size()) {
return null;
} else {
return xList.get(Math.round(value));
}
}
});
xAxis.setLabelRotationAngle(-90);

YAxis leftAxis = bChartRepOne.getAxisLeft();
leftAxis.setLabelCount(8, false);
leftAxis.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART);
leftAxis.setSpaceTop(15f);
YAxis rightAxis = bChartRepOne.getAxisRight();
rightAxis.setEnabled(false);

Legend l = bChartRepOne.getLegend();
l.setEnabled(false);

bChartRepOne.setOnChartValueSelectedListener(new OnChartValueSelectedListener() {
@Override
public void onValueSelected(Entry entry, Highlight highlight) {

}

@Override
public void onNothingSelected() {

}
});

最佳答案

从版本 3.0.1 开始,没有公开的方法可以在一个角度上为给定的 DataSet 绘制值标签。当您处理 DataSet 对象时,您可以使用 IDE 中的自动完成功能来检查这一点。

如果您想自己尝试,您将不得不编写一个自定义渲染器并调用:

mChart.setRenderer(myCustomRenderer);

要制作自定义渲染器,您可以子类化 BarChartRenderer并覆盖以下方法:

drawValue(Canvas c, IValueFormatter formatter, float value, Entry entry, int dataSetIndex, float x, float y, int color) 

您可以将代码放在那里以任意旋转呈现一个标签。

里面有个方法Utils称为:

drawXAxisValue(Canvas c, String text, float x, float y,
Paint paint,
MPPointF anchor, float angleDegrees)

其中包含用于以一定角度绘制文本的代码,因此您可以将其用作模板。

关于android - MPAndroidChart : Is it possible to rotate value labels for a given DataSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300957/

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