setDomainValueFormat中的疯狂错误

时间:2016-06-29 14:54:34

标签: androidplot

我更改了示例代码SimpleXYPlotActivity以格式化域名标签,如下所示:

{{1}}

我不知道为什么,但是情节打印以下域名标签: 1,2,3,5,6,8,9,11,12,13 而不是正确的价值观...... 1,2,3,6,7,8,9,10,13,14

为什么会出现这种疯狂行为?

1 个答案:

答案 0 :(得分:1)

首先,当我运行上面的代码时,根本没有打印任何标签。但如果我更换:

return new StringBuffer(day);

使用:

return toAppendTo.append(day);

然后出现标签。继续......

您的格式化程序正在截断与每个域标记标签关联的浮点x-val。这个浮点组件的原因是因为在实例化SimpleXYSeries时指定了自己的xVals。我怀疑你真正想要的只是指定iVals,因为你实际上并没有在任何地方创建xVals。

我做了这些改变:

首先,创建你的XYSeries实例,从iVals创建xVals,如下所示:

XYSeries series1 = new SimpleXYSeries(Arrays.asList(series1Numbers), SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series1");
XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers),SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Series2");

接下来,更新域格式化程序以使用域标签查找数组,如下所示:

plot.setDomainValueFormat(new Format() {
            @Override
            public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
                int i = Math.round(((Number) obj).floatValue());
                return toAppendTo.append(domainLabels[i]);
            }
            @Override
            public Object parseObject(String source, ParsePosition pos) {
                return null;
            }
        });

对于任何想知道为什么首先将obj转换为浮点数然后在用作iVal之前舍入为int的人:这是避免将浮点值转换为int值时发生的自然地板行为所必需的。例如,如果你在Double表示为1时调用intValue,你会得到0,因为在内部它表示为0.99999999 ...并且通过转换得到0而不是向上舍入为1.