Пример #1
0
 /**
  * The graphical representation of a series.
  *
  * @param canvas the canvas to paint to
  * @param paint the paint to be used for drawing
  * @param points the array of points to be used for drawing the series
  * @param seriesRenderer the series renderer
  * @param yAxisValue the minimum value of the y axis
  * @param seriesIndex the index of the series currently being drawn
  */
 public void drawSeries(
     Canvas canvas,
     Paint paint,
     float[] points,
     SimpleSeriesRenderer seriesRenderer,
     float yAxisValue,
     int seriesIndex) {
   XYSeriesRenderer renderer = (XYSeriesRenderer) seriesRenderer;
   paint.setColor(renderer.getColor());
   if (renderer.isFillPoints()) {
     paint.setStyle(Style.FILL);
   } else {
     paint.setStyle(Style.STROKE);
   }
   int length = points.length;
   switch (renderer.getPointStyle()) {
     case X:
       for (int i = 0; i < length; i += 2) {
         drawX(canvas, paint, points[i], points[i + 1]);
       }
       break;
     case CIRCLE:
       for (int i = 0; i < length; i += 2) {
         drawCircle(canvas, paint, points[i], points[i + 1]);
       }
       break;
     case TRIANGLE:
       float[] path = new float[6];
       for (int i = 0; i < length; i += 2) {
         drawTriangle(canvas, paint, path, points[i], points[i + 1]);
       }
       break;
     case SQUARE:
       for (int i = 0; i < length; i += 2) {
         drawSquare(canvas, paint, points[i], points[i + 1]);
       }
       break;
     case DIAMOND:
       path = new float[8];
       for (int i = 0; i < length; i += 2) {
         drawDiamond(canvas, paint, path, points[i], points[i + 1]);
       }
       break;
     case POINT:
       canvas.drawPoints(points, paint);
       break;
   }
 }
Пример #2
0
  private void drawLineAndPoint(Canvas canvas) {
    canvas.save();

    canvas.translate(100, 100);
    canvas.rotate(30);

    mPaint.setAntiAlias(true);

    mPaint.setColor(Color.RED);
    mPaint.setStrokeWidth(2);
    canvas.drawLines(points, mPaint);

    mPaint.setColor(Color.BLUE);
    mPaint.setStrokeWidth(5);
    canvas.drawPoints(points, mPaint);

    canvas.restore();
  }
Пример #3
0
  /**
   * 自定义的方法,简单绘制一些基本图形
   *
   * @param mCanvas 把图形画在mCanvas上
   */
  public void canvasMethod(Canvas mCanvas) {

    // 创建对应坐标的矩形区域
    RectF mArc = new RectF(mX, mY - 70, mX + 50, mY - 20);
    // 画填充弧,在矩形区域内,从弧的最右边开始,画270度,然后再通过连接圆心来填充
    mCanvas.drawArc(mArc, 0, 270, true, mPaint);

    // 获得icon的Bitmap对象
    Bitmap mBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    // 画图片
    mCanvas.drawBitmap(mBitmap, mX, mY, mPaint);

    // 画圆,(x轴,y轴,半径,画笔)
    mCanvas.drawCircle(mX + 10, mY + 60, 10, mPaint);

    // 画一条线,(起点横坐标,起点纵坐标,终点横坐标,终点纵坐标,画笔)
    mCanvas.drawLine(mX, mY + 75, mX + 20, mY + 75, mPaint);
    // 画多条线,(坐标数组,画笔)坐标数组里每四个值构成一条线
    mCanvas.drawLines(
        new float[] {mX + 50, mY + 45, mX + 50, mY + 75, mX + 60, mY + 45, mX + 60, mY + 75},
        mPaint);

    // 创建对应矩形区域
    RectF mOval = new RectF(mX, mY + 80, mX + 60, mY + 110);
    // 画椭圆
    mCanvas.drawOval(mOval, mPaint);

    /*
     * Paint qPaint = new Paint(); qPaint.setColor(Color.RED);
     * mCanvas.drawPaint(qPaint);
     */

    // 重置Path里的所有路径
    mPath.reset();
    // 设置Path的起点
    mPath.moveTo(mX, mY + 120);
    // 第二个点
    mPath.lineTo(screenW - 10, mY + 120);
    // 第三个点
    mPath.lineTo(screenW - 10, mY + 150);
    // 画出路径,这里画的是三角形
    mCanvas.drawPath(mPath, mPaint);

    // 重置Path里的所有路径
    qPath.reset();
    // 设置Path的起点
    qPath.moveTo(qStartX, qStartY);
    // 设置贝塞尔曲线的控制点坐标和终点坐标
    qPath.quadTo(qControlX, qCOntrolY, qEndX, qEndY);
    // 画出贝塞尔曲线
    mCanvas.drawPath(qPath, qPaint);

    // 画点
    mCanvas.drawPoint(mX, mY + 155, qPaint);
    // 画多个点,坐标数组每两个值代表一个点的坐标
    mCanvas.drawPoints(new float[] {mX, mY + 160, mX + 5, mY + 160, mX + 5, mY + 160}, qPaint);

    // 画矩形
    mCanvas.drawRect(mX, mY + 170, mX + 100, mY + 220, mPaint);

    // 设置矩形区域
    RectF mRect = new RectF(mX, mY + 230, mX + 100, mY + 260);
    // 画圆角矩形,这个方法的第二第三个参数在后面有图讲解
    mCanvas.drawRoundRect(mRect, 10, 10, mPaint);

    // 画文本
    mCanvas.drawText("drawText", mX, mY + 290, mPaint);
    // 画文本,数组里每两个值代表文本的一个字符的坐标,数组的坐标可以比字符串里的字符多,但不可以少
    mCanvas.drawPosText(
        "哈哈你好",
        new float[] {mX, mY + 310, mX + 20, mY + 310, mX + 40, mY + 310, mX + 60, mY + 310},
        mPaint);

    // 重置Path
    tPath.reset();
    // 添加一个圆形路径,坐标,半径,方向(顺时针还是逆时针)
    tPath.addCircle(mX + 10, mY + 340, 10, Path.Direction.CW);
    // 画出路径
    mCanvas.drawPath(tPath, qPaint);
    // 把文本画在路径上,但不会画出路径
    mCanvas.drawTextOnPath("draw", tPath, 30, 0, mPaint);
  }