迟到的答案,但也许对其他人有用。
我也很难解决这个问题,特别是因为我是 Java 初学者。我实现了一个自定义格式化程序。似乎有点丑陋的解决方案,但它的工作原理。思路如下:
- 仅将 Y 轴作为值,并将 X 轴作为索引到数组中(如 Androidplot 教程所建议的,使用 using ArrayFormat.Y_VALS_ONLY,// Y_VALS_ONLY 表示使用元素索引作为 x 值)
- 每次数据更改时,您都需要将新的格式化程序与 X 轴的新数据一起传递给 Plot
以下是一些代码片段。
首先是将数组索引转换为自定义标签字符串的类:
public class MyIndexFormat extends Format {
public String[] Labels = null;
@Override
public StringBuffer format(Object obj,
StringBuffer toAppendTo,
FieldPosition pos) {
// try turning value to index because it comes from indexes
// but if is too far from index, ignore it - it is a tick between indexes
float fl = ((Number)obj).floatValue();
int index = Math.round(fl);
if(Labels == null || Labels.length <= index ||
Math.abs(fl - index) > 0.1)
return new StringBuffer("");
return new StringBuffer(Labels[index]);
}
这是我将它附加到情节的方式:
MyIndexFormat mif = new MyIndexFormat ();
mif.Labels = // TODO: fill the array with your custom labels
// attach index->string formatter to the plot instance
pricesPlot.getGraphWidget().setDomainValueFormat(mif);
这个技巧也适用于动态更新。
注意:Androidplot 似乎有绘制水平线的问题,所以如果你的数据有相同的 Y 值,你可能会得到奇怪的结果,我已经在这个问题上寻求帮助。