Android - MPAndroidChart LineChart,无法根据值日期进行绘图

时间:2016-12-14 18:21:55

标签: android graph mpandroidchart

我在线图上使用MPAndroidChart。 我有日期值和分数值 例如:2016年10月11日我的分数是45。

我正在与日期挣扎。不知道如何在我的setYAxisValues中设置它 我从休息api获取我的值并将其放入图表中。

这部分是我遇到问题的地方。

yVals.add(new Entry(Float.valueOf(ocd.getScore()), foo));

如果我将foo更改为正常的int值,如1,2,3,我没有问题。该图表正在运行。问题是,我需要使用日期在正确的位置绘制我的价值。

@Override
protected void onPostExecute(List<ResultModel> result) {
    super.onPostExecute(result);
   //populating my yAxis with values from rest
    for (ResultModel ocd : resModelList){
        long unixSeconds = Long.parseLong(ocd.getPost_date());
        Date date = new Date(unixSeconds*1000L);
        SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
        String formattedDate = sdf.format(date);
        int foo = Integer.parseInt(formattedDate);
        yVals.add(new Entry(Float.valueOf(ocd.getScore()), foo));
    }
}

X轴正常工作

//set vales
private ArrayList<String> setXAxisValues(){
    xVals = new ArrayList<String>();
//MM/dd/yyyy
    xVals.add("01/01/2016");
    xVals.add("02/01/2016");
    xVals.add("03/01/2016");
    xVals.add("04/01/2016");
    xVals.add("05/01/2016");
    return xVals;
}

private ArrayList<Entry> setYAxisValues(){
    yVals = new ArrayList<Entry>();
    return yVals;
}

提前致谢

1 个答案:

答案 0 :(得分:1)

我有类似的问题,重点是 - MPChart库除了为X轴浮动外没有任何东西。我建议你让X轴用日期的毫米表示。假设您有四个值,日期为“01/01/2016”,“02/01/2016”,“03/01/2016”,“04/01/2016”,“05/01/2016”。您可以添加

之类的值
yVals.add(new Entry(Float.valueOf(ocd.getScore()), "01/01/2016".toMillis()));

“01/01/2016”.toMillis()当然是伪代码,您需要将日期转换为int(float)。

然后,将minX设置为“01/01/2016”.toMillis(),将maxX设置为“04/01/2016”.toMillis(), 并提供一个标签格式化器,将此毫米格式化回字符串日期:

private class  LabelFormatter implements AxisValueFormatter {

        private Context context; 

        private LabelFormatter(Context context) {
            this.context = context;
        }

        @Override
        public int getDecimalDigits() {
            return -1;
        }

        @Override
        public String getFormattedValue(float value, AxisBase axis) {
             return DateUtils.formatDateTime(context, (long) value, DateUtils.FORMAT_SHOW_DATE);
        }
    }