我正在使用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小时,因为我使用setNumHorizontalLabels更改。所以我试图找出错误,当我把日志输出代码放到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实例中,它被截断了。我希望用户可以更多地解决我的问题 明确地给我一些解决方案......
答案 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。