예제 #1
0
  /**
   * Plots a scatter graph
   *
   * @param xCoordinates The x-coordinates
   * @param yCoordinates THe y-coordinates
   */
  private void plotScatterGraph(List<Float> xCoordinates, List<Float> yCoordinates) {

    canvas.setStrokeStyle(color);
    canvas.setFillStyle(fillColor);
    canvas.beginPath();

    float x = xCoordinates.get(0);
    float y = yCoordinates.get(0);

    canvas.moveTo(x, y);
    canvas.strokeRect(x, y, 2, 2);
    canvas.moveTo(x, y);

    for (int i = 1; i < xCoordinates.size(); i++) {
      x = xCoordinates.get(i);
      y = yCoordinates.get(i);

      canvas.moveTo(x, y);
      canvas.strokeRect(x, y, 2, 2);
      canvas.moveTo(x, y);
    }

    canvas.moveTo(x, zero);

    x = xCoordinates.get(0);
    canvas.moveTo(x, zero);

    canvas.closePath();
    canvas.stroke();
    canvas.fill();
  }
예제 #2
0
  /**
   * Plots the line caps on the graph
   *
   * @param xCoordinates The x-coordinates of the caps
   * @param yCoordinates The y-coordinates of the caps
   */
  private void plotLineCaps(
      List<Float> xCoordinates, List<Float> yCoordinates, double lineThickness) {
    canvas.setStrokeStyle(canvas.getBackgroundColor());

    canvas.setFillStyle(color);
    canvas.beginPath();
    Float x, y;
    for (int i = 1; i < xCoordinates.size(); i++) {
      x = xCoordinates.get(i);
      y = yCoordinates.get(i);
      canvas.moveTo(x, y);
      canvas.arc(x, y, lineThickness, 0, 2 * Math.PI, false);
    }

    canvas.closePath();
    canvas.stroke();
    canvas.fill();
  }
예제 #3
0
  /**
   * Plots a line graph
   *
   * @param xCoordinates The x-coordinates
   * @param yCoordinates The y-coordinates
   */
  private void plotLineGraph(
      List<Float> xCoordinates, List<Float> yCoordinates, boolean lineCaps, double lineThickness) {

    canvas.setLineWidth(lineThickness);
    canvas.setLineJoin("round");

    // First draw the filling
    canvas.setStrokeStyle("rgba(0,0,0,255)");
    canvas.setFillStyle(fillColor);
    canvas.beginPath();

    float x = xCoordinates.get(0);
    float y = yCoordinates.get(0);

    canvas.moveTo(x, zero);
    canvas.lineTo(x, y);

    for (int i = 1; i < xCoordinates.size(); i++) {
      x = xCoordinates.get(i);
      y = yCoordinates.get(i);
      canvas.lineTo(x, y);
    }

    canvas.lineTo(x, zero);

    x = xCoordinates.get(0);
    canvas.moveTo(x, zero);

    canvas.closePath();
    canvas.fill();

    if (useShadows) {
      enableShadows(lineThickness, PlotMode.LINE);
    }

    // Then draw the outline
    if (lineCaps) {
      canvas.setLineJoin(Canvas.BEVEL);
    }

    canvas.setStrokeStyle(color);
    canvas.beginPath();

    x = xCoordinates.get(0);
    y = yCoordinates.get(0);

    canvas.moveTo(x, zero);
    canvas.moveTo(x, y);

    for (int i = 1; i < xCoordinates.size(); i++) {
      x = xCoordinates.get(i);
      y = yCoordinates.get(i);
      canvas.lineTo(x, y);
    }

    if (BrowserInfo.get().isIE8() || BrowserInfo.get().isChrome()) {
      /*
       * In IE we have to draw a line down to zero so the path can get
       * closed. If we don't then then there will be a line through the
       * whole graph due to the VML implementation. After we move we also
       * have to draw a 1px line, else IE will not draw anything when
       * stroke width > 1.5px. IE 9-> uses canvas implementation where
       * this problem does not exist
       *
       * Apparently Chrome 18-> joined the club :(
       */
      canvas.moveTo(xCoordinates.get(0), yCoordinates.get(0));
      canvas.lineTo(xCoordinates.get(0) + 1, yCoordinates.get(0));

    } else {
      canvas.moveTo(xCoordinates.get(0), zero);
    }

    canvas.closePath();
    canvas.stroke();

    // Finally, if we have any linecaps then draw them
    if (lineCaps) {
      plotLineCaps(xCoordinates, yCoordinates, lineThickness);
    }
  }