예제 #1
0
  /**
   * Executes the chart demo.
   *
   * @param context the context
   * @return the built intent
   */
  public Intent execute(Context context, Child aChild) {
    Cursor c;
    List<double[]> x = new ArrayList<double[]>();
    List<double[]> values = new ArrayList<double[]>();
    SQLiteDatabase db = new DatabaseOpenHelper(context).getReadableDatabase();
    c =
        db.query(
            "bmichart", new String[] {"day", "P99", "P01", "P50"}, null, null, null, null, null);
    int factor = 5;

    double[] p99 = new double[(c.getCount() / factor) + 1];
    double[] p0 = new double[(c.getCount() / factor) + 1];
    double[] p50 = new double[(c.getCount() / factor) + 1];
    double[] days = new double[(c.getCount() / factor) + 1];
    double[] bmiData = new double[c.getCount() / factor + 1];
    c.moveToFirst();
    int i = 0;
    int temp;
    do {
      if (i % factor == 0) {
        temp = i / factor;
        p99[temp] = c.getDouble(1);
        p0[temp] = c.getDouble(2);
        p50[temp] = c.getDouble(3);
        days[temp] = i;
      }
      i++;
    } while (c.moveToNext());
    c.close();

    // initializing height to -5
    for (i = 0; i < bmiData.length; i++) {
      bmiData[i] = -5;
    }
    c =
        db.query(
            aChild.getDataTableName(), new String[] {"day", "bmi"}, null, null, null, null, null);

    i = 0;
    String[] titles = new String[] {"P99", "P0", "P50", "BMI"};
    int[] colors = new int[] {Color.CYAN, Color.GREEN, Color.RED, Color.BLUE};
    PointStyle[] styles =
        new PointStyle[] {PointStyle.POINT, PointStyle.POINT, PointStyle.POINT, PointStyle.CIRCLE};
    if (c.moveToFirst()) {
      do {
        temp = (int) (c.getDouble(0) / factor);
        bmiData[temp] = c.getDouble(1);
        i++;
      } while (c.moveToNext());
      values.add(bmiData);
    } else {
      titles = new String[] {"P99", "P0", "P50"};
      colors = new int[] {Color.CYAN, Color.GREEN, Color.RED};
      styles = new PointStyle[] {PointStyle.POINT, PointStyle.POINT, PointStyle.POINT};
    }
    for (int v = 0; v < titles.length; v++) {
      x.add(days);
    }
    values.add(p99);
    values.add(p0);
    values.add(p50);

    XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);

    int length = renderer.getSeriesRendererCount();
    for (i = 0; i < length; i++) {
      ((XYSeriesRenderer) renderer.getSeriesRendererAt(i)).setFillPoints(true);
    }

    setChartSettings(
        renderer, "BMI Day Chart", "Days", "BMI", 0, 1000, 0, 125, Color.LTGRAY, Color.LTGRAY);
    renderer.setXLabels(12);
    renderer.setYLabels(10);
    renderer.setShowGrid(true);
    renderer.setXLabelsAlign(Align.RIGHT);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setZoomButtonsVisible(true);
    renderer.setPanLimits(new double[] {-10, 20, -10, 40});
    renderer.setZoomLimits(new double[] {-10, 20, -10, 40});
    Intent intent =
        ChartFactory.getLineChartIntent(
            context, buildDataset(titles, x, values), renderer, aChild.getName());
    c.close();
    db.close();
    return intent;
  }
  /**
   * Executes the chart demo.
   *
   * @param context the context
   * @return the built intent
   */
  public Intent execute(Context context) {
    String[] titles = new String[] {"Crete Air Temperature", "Skiathos Air Temperature"};
    List<double[]> x = new ArrayList<double[]>();
    for (int i = 0; i < titles.length; i++) {
      x.add(new double[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12});
    }
    List<double[]> values = new ArrayList<double[]>();
    values.add(
        new double[] {12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3, 17.2, 13.9});
    values.add(new double[] {9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10});
    int[] colors = new int[] {Color.GREEN, Color.rgb(200, 150, 0)};
    PointStyle[] styles = new PointStyle[] {PointStyle.CIRCLE, PointStyle.DIAMOND};
    XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
    renderer.setPointSize(5.5f);
    int length = renderer.getSeriesRendererCount();

    for (int i = 0; i < length; i++) {
      XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i);
      r.setLineWidth(5);
      r.setFillPoints(true);
    }
    setChartSettings(
        renderer,
        "Weather data",
        "Month",
        "Temperature",
        0.5,
        12.5,
        0,
        40,
        Color.LTGRAY,
        Color.LTGRAY);

    renderer.setXLabels(12);
    renderer.setYLabels(10);
    renderer.setShowGrid(true);
    renderer.setXLabelsAlign(Align.RIGHT);
    renderer.setYLabelsAlign(Align.RIGHT);
    renderer.setZoomButtonsVisible(true);
    renderer.setPanLimits(new double[] {-10, 20, -10, 40});
    renderer.setZoomLimits(new double[] {-10, 20, -10, 40});

    XYValueSeries sunSeries = new XYValueSeries("Sunshine hours");
    sunSeries.add(1, 35, 4.3);
    sunSeries.add(2, 35, 4.9);
    sunSeries.add(3, 35, 5.9);
    sunSeries.add(4, 35, 8.8);
    sunSeries.add(5, 35, 10.8);
    sunSeries.add(6, 35, 11.9);
    sunSeries.add(7, 35, 13.6);
    sunSeries.add(8, 35, 12.8);
    sunSeries.add(9, 35, 11.4);
    sunSeries.add(10, 35, 9.5);
    sunSeries.add(11, 35, 7.5);
    sunSeries.add(12, 35, 5.5);
    XYSeriesRenderer lightRenderer = new XYSeriesRenderer();
    lightRenderer.setColor(Color.YELLOW);

    XYSeries waterSeries = new XYSeries("Water Temperature");
    waterSeries.add(1, 16);
    waterSeries.add(2, 15);
    waterSeries.add(3, 16);
    waterSeries.add(4, 17);
    waterSeries.add(5, 20);
    waterSeries.add(6, 23);
    waterSeries.add(7, 25);
    waterSeries.add(8, 25.5);
    waterSeries.add(9, 26.5);
    waterSeries.add(10, 24);
    waterSeries.add(11, 22);
    waterSeries.add(12, 18);
    renderer.setBarSpacing(0.5);
    XYSeriesRenderer waterRenderer = new XYSeriesRenderer();
    waterRenderer.setColor(Color.argb(250, 0, 210, 250));

    XYMultipleSeriesDataset dataset = buildDataset(titles, x, values);
    dataset.addSeries(0, sunSeries);
    dataset.addSeries(0, waterSeries);
    renderer.addSeriesRenderer(0, lightRenderer);
    renderer.addSeriesRenderer(0, waterRenderer);
    waterRenderer.setDisplayChartValues(true);
    waterRenderer.setChartValuesTextSize(10);

    String[] types =
        new String[] {BarChart.TYPE, BubbleChart.TYPE, LineChart.TYPE, CubicLineChart.TYPE};
    Intent intent =
        ChartFactory.getCombinedXYChartIntent(
            context, dataset, renderer, types, "Weather parameters");
    return intent;
  }