AndroidPlot:我如何更改域数据?

时间:2011-07-21 21:41:42

标签: android charts androidplot android-graphview

我实际上使用AndroidPlot库在我的android项目中使用一个简单的图表但我不知道如何更改域区域的值。

更具体地说,这一行:

mySimpleXYPlot.setDomainValueFormat(new DecimalFormat("#"));

在网站上说我可以使用其他格式和它的真实,但如果我使用例如:

SimpleDateFormat("dd-MM-yyyy")

在图表中,所有域值中都显示“31-12-1969”

有人知道如何更改该日期吗?或使用其他格式(如String)?

1 个答案:

答案 0 :(得分:4)

迟到的答案,但也许会对其他人有用。

我也很难解决这个问题,特别是因为我是Java初学者。 我实现了自定义格式化程序。似乎有点丑陋的解决方案,但它的工作原理。想法如下:

  • 仅取Y轴作为值,并将X轴作为索引保留到数组中(如Androidplot教程建议的那样,使用ArrayFormat.Y_VALS_ONLY,// Y_VALS_ONLY表示使用元素索引作为x值)
  • 每当您的数据发生变化时,您需要传递一个新的格式化程序,其中包含X轴的新数据

以下是一些代码段。

首先是将数组索引转换为自定义标签String的类:

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值,您可能会得到奇怪的结果,我已经就此问题寻求帮助。