Example #1
0
  private void renderDotAndLabel(
      Canvas canvas,
      RadarData lineData,
      // float previousX,float previousY,
      float currentX,
      float currentY,
      int listID) {
    PlotLine plotLine = lineData.getPlotLine();

    if (!plotLine.getDotStyle().equals(XEnum.DotStyle.HIDE)) {
      PlotDot pDot = plotLine.getPlotDot();

      PlotDotRender.getInstance()
          .renderDot(
              canvas,
              pDot,
              currentX - pDot.getDotRadius(),
              currentY - pDot.getDotRadius(),
              currentX,
              currentY,
              lineData.getPlotLine().getDotPaint()); // 标识图形            			
    }
    // 是否显示标签
    if (lineData.getLabelVisible()) {
      canvas.drawText(
          getFormatterDotLabel(lineData.getLinePoint().get(listID)),
          currentX,
          currentY,
          lineData.getPlotLine().getDotLabelPaint());
    }
  }
Example #2
0
  /**
   * 绘制图网络线
   *
   * @param canvas 画布
   * @param lineData 数据集类
   * @param arrayDataX x坐标
   * @param arrayDataY y坐标
   */
  private void drawDataPath(
      Canvas canvas, RadarData lineData, Float[] arrayDataX, Float[] arrayDataY) {
    float startX = 0.0f, startY = 0.0f;
    float initX = 0.0f, initY = 0.0f;

    Path pathArea = new Path();

    for (int p = 0; p < arrayDataX.length; p++) {
      if (0 == p) {
        initX = startX = arrayDataX[p];
        initY = startY = arrayDataY[p];

        pathArea.moveTo(initX, initY);
      } else {
        pathArea.lineTo(arrayDataX[p], arrayDataY[p]);
        startX = arrayDataX[p];
        startY = arrayDataY[p];
      }
      // 绘制点及对应的标签
      renderDotAndLabel(canvas, lineData, arrayDataX[p], arrayDataY[p], p);
    }
    // 收尾
    pathArea.lineTo(initX, initY);
    pathArea.close();

    lineData.getPlotLine().getLinePaint().setAlpha(mAreaAlpha);
    // lineData.getPlotLine().getLinePaint().setStyle(Style.STROKE);
    canvas.drawPath(pathArea, lineData.getPlotLine().getLinePaint());
  }
Example #3
0
  /** 绘制key */
  protected void renderKey(Canvas canvas) {
    if (!getKeyVisible()) return;

    DrawHelper dw = new DrawHelper();
    float textHeight = dw.getPaintFontHeight(getKeyPaint());
    float rectWidth = 2 * textHeight;
    float currentX = 0.0f;
    float currentY = 0.0f;

    if (!isVerticalScreen()) // 横屏
    {
      getKeyPaint().setTextAlign(Align.RIGHT);
      currentX = plotArea.getRight();
      currentY = this.plotArea.getTop() + textHeight;
    } else {
      getKeyPaint().setTextAlign(Align.LEFT);
      currentX = plotArea.getLeft();
      currentY = this.plotArea.getBottom();
    }

    int totalTextWidth = 0;
    for (RadarData cData : mDataSet) {
      getKeyPaint().setColor(cData.getLineColor());
      if (!isVerticalScreen()) // 横屏
      {
        canvas.drawRect(
            currentX, currentY, currentX - rectWidth, currentY - textHeight, getKeyPaint());

        canvas.drawText(cData.getLineKey(), currentX - rectWidth, currentY, getKeyPaint());

        currentY = MathHelper.getInstance().add(currentY, textHeight);

      } else { // 竖屏
        int keyTextWidth = dw.getTextWidth(getKeyPaint(), cData.getLineKey());
        totalTextWidth += keyTextWidth;

        if (totalTextWidth > plotArea.getWidth()) {
          currentY += textHeight;
          currentX = plotArea.getLeft();
          totalTextWidth = 0;
        }
        canvas.drawRect(
            currentX, currentY, currentX + rectWidth, currentY - textHeight, getKeyPaint());
        canvas.drawText(cData.getLineKey(), currentX + rectWidth, currentY, getKeyPaint());

        currentX = MathHelper.getInstance().add(currentX, rectWidth + keyTextWidth + 5);
      }
    }
  }
Example #4
0
  /**
   * 绘制数据区网络
   *
   * @param canvas 画布
   */
  private void renderDataArea(Canvas canvas) {
    float cirX = plotArea.getCenterX();
    float cirY = plotArea.getCenterY();

    for (RadarData lineData : mDataSet) {
      // 画各自的网
      List<Double> dataset = lineData.getLinePoint();

      int dataSize = dataset.size();
      if (dataSize < 3) {
        Log.e(TAG, "这几个数据可不够,最少三个起步.");
        continue;
      }

      Float[] arrayDataX = new Float[dataSize];
      Float[] arrayDataY = new Float[dataSize];

      int i = 0;
      for (Double data : dataset) {
        Double per = (data - dataAxis.getAxisMin()) / dataAxis.getAxisRange();
        float curRadius = (float) (getRadius() * per);

        // 计算位置
        MathHelper.getInstance().calcArcEndPointXY(cirX, cirY, curRadius, mArrayLabelAgent[i]);

        // 依Path还是Line来决定画线风格
        arrayDataX[i] = MathHelper.getInstance().getPosX();
        arrayDataY[i] = MathHelper.getInstance().getPosY();

        i++; // 标签
      }

      // 画线或填充
      switch (lineData.getAreaStyle()) {
        case FILL:
          drawDataPath(canvas, lineData, arrayDataX, arrayDataY);
          break;
        case STROKE:
          renderDataLine(canvas, lineData, arrayDataX, arrayDataY);
          break;
        default:
          Log.e(TAG, "这类型不认识.");
      }
    }
  }
Example #5
0
  /**
   * 绘制数据连接线
   *
   * @param canvas 画布
   * @param lineData 数据集类
   * @param arrayDataX x坐标
   * @param arrayDataY y坐标
   */
  private void renderDataLine(
      Canvas canvas, RadarData lineData, Float[] arrayDataX, Float[] arrayDataY) {
    float startX = 0.0f, startY = 0.0f;
    float initX = 0.0f, initY = 0.0f;

    for (int p = 0; p < arrayDataX.length; p++) {
      if (0 == p) {
        initX = startX = arrayDataX[p];
        initY = startY = arrayDataY[p];
      } else {
        DrawHelper.getInstance()
            .drawLine(
                lineData.getLineStyle(),
                startX,
                startY,
                arrayDataX[p],
                arrayDataY[p],
                canvas,
                lineData.getPlotLine().getLinePaint());

        startX = arrayDataX[p];
        startY = arrayDataY[p];
      }
      // 绘制点及对应的标签
      renderDotAndLabel(canvas, lineData, arrayDataX[p], arrayDataY[p], p);
    }
    // 收尾
    DrawHelper.getInstance()
        .drawLine(
            lineData.getLineStyle(),
            startX,
            startY,
            initX,
            initY,
            canvas,
            lineData.getPlotLine().getLinePaint());
  }