自定义Android GraphView x轴日期标签未按setNumHorizo​​ntalValues()显示

时间:2018-10-23 22:09:00

标签: android-graphview

我尝试在graphview图表的x轴上显示简洁格式的日期/时间。根据{{​​3}},当在该轴上使用日期格式化程序时,我将HumanRounding设置为false。我还将NumHorizo​​ntalLabels设置为3,以便在两个方向上都可以正常显示。

例如以下内容,其中日期标签显示为黑色,而LineChart背景不同。我推测黑色形状是我所有日期数据点相互覆盖的结果:

API Code examples

在将HumanRounding设置为true(注释掉)的情况下,我得到了显示的标签,但是它们不是预期的3个均匀分布的标签,而是不可预测地散布和/或不等于3,有时标签相互覆盖,有时它们会聚在左侧...

With HumanRounding set to false

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个日期时间,这两个方向都适用于变化的样本大小。任何帮助表示赞赏。

0 个答案:

没有答案