我有一张使用AChartEngine的饼图,我很满意。我选择没有Legend和带标签的样式(文本连接到相应的Pie wedge带有一条小线)格式化为“Example Data Point - 25%”
我通过以下方式获取此标签字符串:
mSeries.add(name + " - " + Double.toString(value), value);
但通常名称太长,因此不显示该值。我得到“......”。由于值很重要,我想将它放在一个新行上,以便它始终显示。
我正在想象看起来像这样的标签:
短名称
10%
A Na太长了...
25%
也很好:
A的太长
姓名
25%
或者:
A的太长 名称 - 25%
如果我可以将长名称换成新行,那就更好了!但我真的非常关心让值始终显示。
我尝试使用 \ n 或System.getProperty(“line.separator”)添加新行,但PieChart仍然将Label呈现为一行。 \ n没有显示为文本,就像它甚至不存在一样。根据其他问题,这可能适用于其他图表类型,但没有人声称它适用于Pies,它似乎不是基于我的努力。
我还玩过AChartEngine内置的其他渲染选项。例如'setDisplayValues(true)',它将值放在饼图上。我不喜欢它看起来如何,因为我的馅饼有一些微小的楔形,所以这些值会相互重叠。
有关如何在AChartEngine PieChart多行(或任何其他方式强制显示值)上制作标签的任何见解将非常感激!非常感谢能够提供帮助的任何人!
答案 0 :(得分:1)
这不是我真正想要的,但是几个月过去了,我提出了另一种选择。对于子孙后代,我会把它留在这里作为我自己问题的答案,但不接受它,以防有人在某一天有共享真正的解决方案。
由于我无法找到确保饼图上的标签始终显示百分比值的方法,因此我会在点击楔形时获得Toast信息。这是足够简单的代码:
private void addPieClickListeners(final GraphicalView mChartView){
mChartView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint();
if (seriesSelection == null) {
// Do Nothing, Possible Toast:
// Toast.makeText(context,"No chart element was clicked",Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(context,
Integer.toString((int)Math.round(seriesSelection.getValue())) +
"% " +
mSeries.getCategory(seriesSelection.getPointIndex()),
Toast.LENGTH_SHORT).show();
}
}
});
我在onCreateView()中调用此方法以及我的其他函数来设置我的饼图,因为它位于片段中。
干杯。