我尝试在graphview图表的x轴上显示简洁格式的日期/时间。根据{{3}},当在该轴上使用日期格式化程序时,我将HumanRounding设置为false。我还将NumHorizontalLabels设置为3,以便在两个方向上都可以正常显示。
例如以下内容,其中日期标签显示为黑色,而LineChart背景不同。我推测黑色形状是我所有日期数据点相互覆盖的结果:
在将HumanRounding设置为true(注释掉)的情况下,我得到了显示的标签,但是它们不是预期的3个均匀分布的标签,而是不可预测地散布和/或不等于3,有时标签相互覆盖,有时它们会聚在左侧...
x轴上日期数据点的数量可能会有所不同,具体取决于用户选择了多少历史记录。请注意,这可能从60分钟到数千分钟不等。
这是接收数据并绘制图表的代码。请注意,从wxList元素检索到的unixdate已经在此处使用的时间(x轴的时间部分实际上在正确显示时正确)转换为Java日期(乘以1000)。分布式方式):
protected void onPostExecute(List<WxData> wxList) {
// We will display MM/dd HH:mm on the x-axes on all graphs...
SimpleDateFormat shortDateTime = new SimpleDateFormat("MM/dd HH:mm");
shortDateTime.setTimeZone(TimeZone.getTimeZone("America/Toronto"));
DateAsXAxisLabelFormatter xAxisFormat = new DateAsXAxisLabelFormatter(parentContext, shortDateTime);
if (wxList == null || wxList.isEmpty()) {
makeText(parentContext,
"Could not retrieve data from server",
Toast.LENGTH_LONG).show();
} else {
// Temperature Celcius
GraphView tempGraph = findViewById(R.id.temp_graph);
tempGraph.removeAllSeries();
tempGraph.setTitle(parentContext.getString(R.string.temp_graph_label));
DataPoint[] tempCArray = new DataPoint[wxList.size()];
for (int i = 0; i < wxList.size(); i++) {
tempCArray[i] = new DataPoint(wxList.get(i).getUnixtime(), wxList.get(i).getTempC().doubleValue());
}
LineGraphSeries<DataPoint> tempCSeries = new LineGraphSeries<>(tempCArray);
tempGraph.addSeries(tempCSeries);
tempGraph.getGridLabelRenderer().invalidate(false, false);
tempGraph.getGridLabelRenderer().setLabelFormatter(xAxisFormat);
tempGraph.getGridLabelRenderer().setNumHorizontalLabels(3);
tempGraph.getViewport().setMinX(wxList.get(0).getUnixtime());
tempGraph.getViewport().setMaxX(wxList.get(wxList.size() - 1).getUnixtime());
tempGraph.getViewport().setXAxisBoundsManual(true);
// Code below seems buggy - with humanRounding, X-axis turns black
// tempGraph.getGridLabelRenderer().setHumanRounding(false);
...
我尝试了多种变体,但是我无法使图形始终显示均匀分布的3个日期时间,这两个方向都适用于变化的样本大小。任何帮助表示赞赏。