private void generateInitialLineData() {
    int numValues = 7;
    List<AxisValue> axisValues = new ArrayList<AxisValue>();
    List<PointValue> values = new ArrayList<PointValue>();
    for (int i = 0; i < numValues; ++i) {
      values.add(new PointValue(i, 0));
      axisValues.add(new AxisValue(i).setLabel(days[i]));
    }
    Line line = new Line(values);
    line.setColor(ChartUtils.COLOR_GREEN).setCubic(true);
    List<Line> lines = new ArrayList<Line>();
    lines.add(line);
    lineData = new LineChartData(lines);
    lineData.setAxisXBottom(new Axis(axisValues).setHasLines(true));
    lineData.setAxisYLeft(new Axis().setHasLines(true).setMaxLabelChars(3));
    chartTop.setLineChartData(lineData);
    // For build-up animation you have to disable viewport recalculation.
    chartTop.setViewportCalculationEnabled(false);

    // And set initial max viewport and current viewport- remember to set viewports after data.
    Viewport v = new Viewport(0, 110, 6, 0);
    chartTop.setMaximumViewport(v);
    chartTop.setCurrentViewport(v);

    chartTop.setZoomType(ZoomType.HORIZONTAL);
    generateLineData(ChartUtils.COLOR_GREEN, 100);
  }
 public LineChartData previewLineData() {
   LineChartData previewLineData = new LineChartData(lineData());
   previewLineData.setAxisYLeft(yAxis());
   previewLineData.setAxisXBottom(previewXAxis());
   previewLineData.getLines().get(4).setPointRadius(2);
   previewLineData.getLines().get(5).setPointRadius(2);
   previewLineData.getLines().get(6).setPointRadius(2);
   return previewLineData;
 }
    // 产生数据 记录
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    private void generateDefaultData(int[] recordMsgBuffer) {
      int max = recordMsgBuffer[0];
      int min = recordMsgBuffer[0];
      List<PointValue> values = new ArrayList<PointValue>();

      for (int j = 0; j < recordMsgBuffer.length; j++) {
        values.add(new PointValue(j, (float) recordMsgBuffer[j] / 10f));

        if (recordMsgBuffer[j] > max) {
          max = recordMsgBuffer[j];
        }

        if (recordMsgBuffer[j] < min) {
          min = recordMsgBuffer[j];
        }
      }

      if (max - min < 50) {
        max = max + 25;
        min = min - 25;
      }

      Line line = new Line(values);
      line.setColor(ChartUtils.COLOR_GREEN);
      line.setHasPoints(false); // too many values so don't draw points.
      //            line.setFilled(true);

      List<PointValue> values1 = new ArrayList<PointValue>();
      values1.add(new PointValue(0, (float) max / 10f + 0.2f));
      Line line1 = new Line(values1);
      line1.setHasPoints(false); // too many values so don't draw points.
      line1.setPointRadius(0);

      List<PointValue> values2 = new ArrayList<PointValue>();
      values2.add(new PointValue(0, (float) min / 10f - 0.2f));
      Line line2 = new Line(values2);
      line2.setHasPoints(false); // too many values so don't draw points.
      line2.setPointRadius(0);

      List<Line> lines = new ArrayList<Line>();
      lines.add(line);
      lines.add(line1);
      lines.add(line2);

      data = new LineChartData(lines);
      data.setAxisXBottom(new Axis().setHasLines(true).setTextColor(ChartUtils.COLOR_GREEN));
      data.setAxisYLeft(
          new Axis().setHasLines(true).setMaxLabelChars(4).setTextColor(ChartUtils.COLOR_GREEN));

      // prepare preview data, is better to use separate deep copy for preview recordChart.
      // Set color to grey to make preview area more visible.
      previewData = new LineChartData(data);
      previewData.getLines().get(0).setColor(ChartUtils.DEFAULT_DARKEN_COLOR);
    }
    // 产生数据 实时
    /////////////////////////////////////////////////////////////////////////////////////////
    private void generateInitialLineData() {
      int numValues = 19;

      List<AxisValue> axisValues = new ArrayList<AxisValue>();
      List<PointValue> values = new ArrayList<PointValue>();
      for (int i = 0; i < numValues; ++i) {
        values.add(new PointValue(i, 0));
        axisValues.add(new AxisValue(i).setLabel(days[i]));
      }

      Line line = new Line(values);
      line.setColor(ChartUtils.COLOR_BLUE);
      line.setHasPoints(false);
      line.getShape();
      line.setCubic(false); // 平滑

      List<Line> lines = new ArrayList<Line>();
      lines.add(line);
      //            lines.add(line1);
      //            lines.add(line2);

      Axis axisX = new Axis(axisValues);
      Axis axisY = new Axis().setHasLines(true);
      if (hasAxesNames) {
        axisX.setName("时间间隔");
        // axisY.setName("温度");
        axisX.setTextColor(ChartUtils.HOLO_BLUE_DARK);
        axisY.setTextColor(ChartUtils.HOLO_BLUE_DARK);
      }

      lineData = new LineChartData(lines);
      lineData.setAxisXBottom(axisX.setHasLines(true));
      lineData.setAxisYLeft(axisY.setMaxLabelChars(4));

      realeChartTop.setLineChartData(lineData);

      // For build-up animation you have to disable viewport recalculation.
      // 建立动画你必须禁用视图重新计算。
      realeChartTop.setViewportCalculationEnabled(false);

      // And set initial max viewport and current viewport- remember to set viewports after data.
      // 设置初始值和当前视口视口记得要在数据集视图。
      Viewport v = new Viewport(0, 50, 20, -10);
      realeChartTop.setMaximumViewport(v);
      realeChartTop.setCurrentViewport(v);
      realeChartTop.setZoomType(ZoomType.HORIZONTAL);

      // toggleFilled();
      // toggleLabels();
      toggleAxesNames();
    }
    private void generateLineData(int color, int range, float textTemple) {
      // Cancel last animation if not finished.
      // chartTop.cancelDataAnimation();

      // Modify data targets
      // 修改数据目标
      Line line = lineData.getLines().get(0); // For this example there is always only one line.
      line.setColor(color);
      line.setFilled(true);
      line.setHasLabels(true);
      line.setHasPoints(false);
      List<PointValue> lineList = line.getValues();

      for (int j = 0; j < lineList.size(); j++) {
        PointValue value = lineList.get(j);
        if (j == lineList.size() - 1) {
          value.setTarget(value.getX(), textTemple);
        } else {
          PointValue nextValue = lineList.get(j + 1);
          value.setTarget(value.getX(), nextValue.getY());
        }
      }

      // Start new data animation with 300ms duration;
      realeChartTop.startDataAnimation(0);
    }
 public static void updateChart() {
   if (iobcobPastChart != null) {
     iobcobPastChart.setLineChartData(
         LineChartData
             .generateDummyData()); //// TODO: 07/10/2015 debug, trying to reset data in chart to
                                    // stop odd issue with lines looping
     iobcobPastChart.setLineChartData(extendedGraphBuilder.iobcobPastLineData());
   }
 }
  public void addListToChart(List<Day> days) {
    int currentValue;
    int size = days.size();
    maxValueOfLineChartData = 0;
    List<PointValue> valuePoints = new ArrayList<PointValue>();

    if (size == 1) {
      for (int i = 0; i < 24; i++) {
        currentValue = days.get(0).getHours().get(i).getMmm().getMean();
        if (currentValue > maxValueOfLineChartData) {
          maxValueOfLineChartData = currentValue;
        }
        valuePoints.add(new PointValue(i, currentValue));
      }
    } else {
      for (int i = 0; i < size; i++) {
        currentValue = days.get(i).getMmm().getMean();
        if (currentValue > maxValueOfLineChartData) {
          maxValueOfLineChartData = currentValue;
        }
        valuePoints.add(new PointValue(i, currentValue));
      }
    }

    dataLine = new Line(valuePoints);
    dataLine.setColor(ChartUtils.COLOR_ORANGE);
    dataLine.setHasPoints(false);

    List<Line> lines = new ArrayList<Line>();
    lines.add(dataLine);

    data = new LineChartData(lines);
    data.setAxisXBottom(new Axis());
    data.setAxisYLeft(new Axis().setHasLines(true));

    previewData = new LineChartData(data);
    previewData.getLines().get(0).setColor(ChartUtils.DEFAULT_DARKEN_COLOR);

    chart.setLineChartData(data);
    previewChart.setLineChartData(previewData);

    updateChartView();
  }
    private LineChartData generateLineChartData() {
      int numValues = 20;

      List<PointValue> values = new ArrayList<PointValue>();
      for (int i = 0; i < numValues; ++i) {
        values.add(new PointValue(i, (float) Math.random() * 100f));
      }

      Line line = new Line(values);
      line.setColor(ChartUtils.COLOR_GREEN);

      List<Line> lines = new ArrayList<Line>();
      lines.add(line);

      LineChartData data = new LineChartData(lines);
      data.setAxisXBottom(new Axis().setName("Axis X"));
      data.setAxisYLeft(new Axis().setName("Axis Y").setHasLines(true));
      return data;
    }
    private LineChartData generatePreviewLineChartData() {
      int numValues = 50;

      List<PointValue> values = new ArrayList<PointValue>();
      for (int i = 0; i < numValues; ++i) {
        values.add(new PointValue(i, (float) Math.random() * 100f));
      }

      Line line = new Line(values);
      line.setColor(ChartUtils.DEFAULT_DARKEN_COLOR);
      line.setHasPoints(false); // too many values so don't draw points.

      List<Line> lines = new ArrayList<Line>();
      lines.add(line);

      LineChartData data = new LineChartData(lines);
      data.setAxisXBottom(new Axis());
      data.setAxisYLeft(new Axis().setHasLines(true));

      return data;
    }
  /** ************************** DATA POINTS *************************** */
  private void getForecastData() {

    List<PointValue> values = new ArrayList<PointValue>();
    // List<PointValue> values2 = new ArrayList<PointValue>();
    for (int i = 0; i < numData; ++i) {
      Log.d("VALUES", "Time: " + Integer.toString(times[i]));
      Log.d("VALUES", "Temp: " + Double.toString(temperatures[i]));

      values.add(new PointValue(times[i], (float) temperatures[i]));
      /*
      if (i==0 || i==6 || i==12 || i==15 || i==17 || i==20) {
          values2.add(new PointValue(times[i], (float) temperatures[i]+(float) (Math.random() - 0.50f)));
      } else {
          values2.add(new PointValue(times[i], values2.get(i-1).getY() + (float) (Math.random()/3 - 0.25f)));
      }*/
    }

    Line line = new Line(values);
    line.setColor(ChartUtils.COLOR_GREEN);
    line.setHasPoints(false); // too many values so don't draw points.
    List<Line> lines = new ArrayList<Line>();
    lines.add(line);
    /*
            Line line2 = new Line(values2);
            line2.setColor(ChartUtils.COLOR_BLUE);
            line2.setHasPoints(false);
            lines.add(line2);
    */
    data = new LineChartData(lines);
    data.setAxisXBottom(new Axis());
    data.setAxisYLeft(new Axis().setHasLines(true));

    // prepare preview data, is better to use separate deep copy for preview chart.
    // Set color to grey to make preview area more visible.
    previewData = new LineChartData(data);
    previewData.getLines().get(0).setColor(ChartUtils.DEFAULT_DARKEN_COLOR);
    //        previewData.getLines().get(1).setColor(ChartUtils.DEFAULT_DARKEN_COLOR);

  }
  private void generateLineData(int color, float range) {
    // Cancel last animation if not finished.
    chartTop.cancelDataAnimation();

    // Modify data targets
    Line line = lineData.getLines().get(0); // For this example there is always only one line.
    line.setColor(color);
    for (PointValue value : line.getValues()) {
      // Change target only for Y value.
      value.setTarget(value.getX(), (float) Math.random() * range);
    }
    // Start new data animation with 300ms duration;
    chartTop.startDataAnimation(300);
  }
  private void generateDefaultData() {
    int numValues = 50;

    List<PointValue> values = new ArrayList<PointValue>();
    for (int i = 0; i < numValues; ++i) {
      values.add(new PointValue(i, (float) Math.random() * 100f));
    }

    Line line = new Line(values);
    line.setColor(ChartUtils.COLOR_GREEN);
    line.setHasPoints(false); // too many values so don't draw points.

    List<Line> lines = new ArrayList<Line>();
    lines.add(line);

    data = new LineChartData(lines);
    data.setAxisXBottom(new Axis());
    data.setAxisYLeft(new Axis().setHasLines(true));

    // prepare preview data, is better to use separate deep copy for preview chart.
    // Set color to grey to make preview area more visible.
    previewData = new LineChartData(data);
    previewData.getLines().get(0).setColor(ChartUtils.DEFAULT_DARKEN_COLOR);
  }
  private void updateGraph(Cursor cursor) {
    // set up the goal line
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    int goalCalories = Integer.parseInt(prefs.getString("preference_calorie_goal", "2000"));
    List<PointValue> goalValues = new ArrayList<>();

    // set up the data
    List<PointValue> values = new ArrayList<>();
    cursor.moveToFirst();

    if (!cursor.isAfterLast()) {
      goalValues.add(new PointValue(getTimeFromRow(cursor), goalCalories));
    }

    while (cursor.isAfterLast() == false) {
      float value = cursor.getFloat(cursor.getColumnIndex("total"));
      // Log.d("graph", "adding " + value + " on " + sdf.format(getTimeFromRow(cursor)));
      values.add(new PointValue(getTimeFromRow(cursor), value));
      cursor.moveToNext();
    }

    cursor.moveToLast();
    goalValues.add(new PointValue(getTimeFromRow(cursor), goalCalories));

    List<Line> lines = new ArrayList<Line>();

    Line goalLine = new Line(goalValues).setColor(Color.parseColor("#ff0000"));
    lines.add(goalLine);

    Line line = new Line(values).setColor(Color.parseColor("#44a134")).setCubic(true);
    // line.setFilled(true);
    // line.setHasLabels(true);

    lines.add(line);

    LineChartData data = new LineChartData();
    data.setLines(lines);

    Axis timeAxis = new Axis();
    // timeAxis.setName("");
    // timeAxis.setTextColor(ChartUtils.COLOR_ORANGE);
    timeAxis.setMaxLabelChars(5);
    timeAxis.setFormatter(new TimestampAxisFormatter());
    timeAxis.setHasLines(true);
    timeAxis.setHasTiltedLabels(true);
    data.setAxisXBottom(timeAxis);

    Axis calorieAxis = new Axis();
    // weightAxis.setName("");
    // weightAxis.setTextColor(ChartUtils.COLOR_GREEN);
    calorieAxis.setMaxLabelChars(7);
    calorieAxis.setFormatter(new SimpleAxisValueFormatter().setAppendedText(" C".toCharArray()));
    calorieAxis.setHasLines(true);
    calorieAxis.setHasTiltedLabels(true);
    data.setAxisYLeft(calorieAxis);

    hellochart.setLineChartData(data);
    hellochart.setZoomType(ZoomType.HORIZONTAL);
    hellochart.setOnValueTouchListener(new ValueTouchListener());

    // set up zoom so we can see 0 calories
    Viewport viewport = new Viewport(hellochart.getMaximumViewport());
    viewport.bottom = 0;
    hellochart.setMaximumViewport(viewport);
    hellochart.setCurrentViewport(viewport);

    hellochart.invalidate();
  }
 public LineChartData lineData() {
   LineChartData lineData = new LineChartData(defaultLines());
   lineData.setAxisYLeft(yAxis());
   lineData.setAxisXBottom(xAxis());
   return lineData;
 }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.graph);
    // generate Dates
    Calendar calendar = Calendar.getInstance();
    Date d1 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d2 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d3 = calendar.getTime();

    Date d4 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d5 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d6 = calendar.getTime();

    Date d7 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d8 = calendar.getTime();
    calendar.add(Calendar.DATE, 1);
    Date d9 = calendar.getTime();

    GraphView graph = (GraphView) findViewById(R.id.graph);

    // you can directly pass Date objects to DataPoint-Constructor
    // this will convert the Date to double via Date#getTime()
    LineGraphSeries<DataPoint> series =
        new LineGraphSeries<DataPoint>(
            new DataPoint[] {
              new DataPoint(d1, 1),
              new DataPoint(d2, 5),
              new DataPoint(d3, 3),
              new DataPoint(d4, 4),
              new DataPoint(d5, 6),
              new DataPoint(d6, 5),
              new DataPoint(d7, 7),
              new DataPoint(d8, 4),
              new DataPoint(d9, 6),
            });
    series.setColor(getResources().getColor(android.R.color.holo_green_dark));
    LineGraphSeries<DataPoint> series2 =
        new LineGraphSeries<DataPoint>(
            new DataPoint[] {
              new DataPoint(d1, 2),
              new DataPoint(d2, 3),
              new DataPoint(d3, 3),
              new DataPoint(d4, 4),
              new DataPoint(d5, 5),
              new DataPoint(d6, 5),
              new DataPoint(d7, 7),
              new DataPoint(d8, 4),
              new DataPoint(d9, 6),
            });
    series.setColor(getResources().getColor(android.R.color.holo_red_dark));
    graph.addSeries(series);
    graph.addSeries(series2);

    // set date label formatter
    graph
        .getGridLabelRenderer()
        .setLabelFormatter(new DateAsXAxisLabelFormatter(NativeGraphActivity.this));
    graph.getGridLabelRenderer().setNumHorizontalLabels(8); // only 4 because of the space

    // set manual x bounds to have nice steps
    graph.getViewport().setMinX(d1.getTime());
    graph.getViewport().setMaxX(d9.getTime());
    graph.getViewport().setXAxisBoundsManual(true);

    lecho.lib.hellocharts.view.LineChartView chartView = (LineChartView) findViewById(R.id.chart);
    List<PointValue> values = new ArrayList<PointValue>();
    values.add(new PointValue(0, 2));
    values.add(new PointValue(1, 4));
    values.add(new PointValue(2, 3));
    values.add(new PointValue(3, 4));

    // In most cased you can call data model methods in builder-pattern-like manner.
    Line line =
        new Line(values)
            .setColor(getResources().getColor(android.R.color.holo_red_dark))
            .setCubic(false);

    List<Line> lines = new ArrayList<Line>();
    lines.add(line);

    LineChartData data = new LineChartData();
    data.setLines(lines);
    Axis axis = new Axis();
    axis.setHasTiltedLabels(true);

    data.setAxisXBottom(new Axis().setAutoGenerated(true));
    data.setAxisYLeft(new Axis().setAutoGenerated(true));
    data.setBaseValue(20);

    chartView.setLineChartData(data);
  }