GraphView格式标签丢弃一些数字用于非常大的数据

时间:2015-09-17 11:07:09

标签: android android-graphview

我正在使用graphview库并尝试将图形标签格式化为“HH”格式的时间,从毫秒开始。我将数据点的每个x值串联为毫秒,这非常像'1.442440833138E12'。之后,我将自定义LabelFormatter设置如下:

        @Override
        public String formatLabel(double value, boolean isValueX) {
            if (isValueX) {
                SimpleDateFormat format = new SimpleDateFormat("HH");

                Date date = new Date((long) value);
                Log.i("formatLabel", Double.toString(date.getTime()));
                return format.format(date);
            } else {
                return super.formatLabel(value, isValueX);
            }
        }

但是当我查看我的图表时,它与我输入的内容不同,就像我将毫秒等于07小时一样,图表显示11小时或01小时,因为我使用setNumHorizo​​ntalLabels更改。所以我试图找出错误,当我把日志输出代码放到formatLabel方法时,日志输出如下:

09-17 20:03:50.287  28093-28093/? I/formatLabel﹕ 1.44243E12
09-17 20:03:50.287  28093-28093/? I/formatLabel﹕ 1.44244E12
09-17 20:03:50.287  28093-28093/? I/formatLabel﹕ 1.44245E12
09-17 20:03:50.287  28093-28093/? I/formatLabel﹕ 1.44246E12
09-17 20:03:50.292  28093-28093/? I/formatLabel﹕ 1.44247E12

应该看起来像'1.442440833138E12'。我还尝试使用数字精度自定义DefaultFormatter,最小值为“12”,但结果相同。

有人可以向我解释为什么会这样吗?

----------------------------------------------- --------------------------------

这是我在每个系列中添加数据点的代码。

DataPoint[] data1=new DataPoint[SIZE] ;
for(int i=0;i<SIZE;i++)
{
  data1=new DataPoint(new Date(time),value) ;
  //test whether x prints all full millisecond
  Log.i("formatLabel", Double.toString(data1.getX()));

}

LineGraphSeries<DataPoint> series=new LineGraphSeries(data1) ;

当我看到日志输出时,我给每个数据点的x值与日期,我得到 完整的毫秒表示法,如'1.442440833138E12'。但是在我上面的自定义formatLabel实例中,它被截断了。我希望用户可以更多地解决我的问题 明确地给我一些解决方案......

1 个答案:

答案 0 :(得分:1)

您应该为这样的系列添加日期/时间:

series.appendData(new DataPoint(new Date(time), value), true, Integer.MAX_VALUE);

并将标签格式化为:

graph.getGridLabelRenderer().setLabelFormatter(
        new DateAsXAxisLabelFormatter(getActivity(),
                        SimpleDateFormat.getDateInstance(SimpleDateFormat.SHORT)) {
            @Override
            public String formatLabel(double value, boolean isValueX) {
                if (isValueX)
                    return super.formatLabel(value, isValueX);
                else
                    // format Y-axis label
            }
        });

(该示例使用默认的简短SimpleDateFormat实例)

查看标签格式代码:无需为每个数据点实例化SimpleDateFormat。