Java Code Examples for android.graphics.Path#close()

The following examples show how to use android.graphics.Path#close() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: ImageBubbleLayout.java    From LazyRecyclerAdapter with MIT License 6 votes vote down vote up
private void initBottomSquarePath(RectF rect, Path path, float strokeWidth) {

        path.moveTo(rect.left + strokeWidth, rect.top + strokeWidth);
        path.lineTo(rect.right - strokeWidth, rect.top + strokeWidth);
        path.lineTo(rect.right - strokeWidth, rect.bottom - getArrowHeight() - strokeWidth);


        path.lineTo(rect.left + getArrowWidth() + getArrowPosition() - (strokeWidth / 2), rect.bottom - getArrowHeight() - strokeWidth);
        path.lineTo(rect.left + getArrowPosition() + getArrowWidth() / 2, rect.bottom - strokeWidth - strokeWidth);
        path.lineTo(rect.left + getArrowPosition() + (strokeWidth / 2), rect.bottom - getArrowHeight() - strokeWidth);
        path.lineTo(rect.left + getArrowPosition() + strokeWidth, rect.bottom - getArrowHeight() - strokeWidth);


        path.lineTo(rect.left + strokeWidth, rect.bottom - getArrowHeight() - strokeWidth);
        path.lineTo(rect.left + strokeWidth, rect.top + strokeWidth);
        path.close();
    }
 
Example 2
Source File: MultipleProgressBar.java    From RetrofitClient with MIT License 6 votes vote down vote up
private void drawCircleProgress(Canvas canvas) {

        int centerX = getWidth() / 2;
        int centerY = getHeight() / 2;
        canvas.drawCircle(centerX, centerY, mRadius, mBgPaint);
        if (strokeWidth > 0) {
            canvas.drawCircle(getWidth() / 2, getHeight() / 2, mRadius, mStrokePaint);
        }
        Path path = new Path();
        path.moveTo(centerX, centerY);
        path.lineTo(centerX, 0);
        RectF rectF = new RectF(0, 0, getRight(), getBottom());
        path.arcTo(rectF, 270, mProgress / mMaxProgress * 360);
        path.close();
        canvas.drawPath(path, mProgressPaint);
    }
 
Example 3
Source File: LineCanvasHandler.java    From za-Farmer with MIT License 6 votes vote down vote up
@Override
public void handle(Canvas canvas) {
    Paint paint = new Paint();
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(8);

    //中间画布操作
    canvas.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, paint);
    Path triangle = new Path();
    Point triangleP[] = getTrianPoint(startPoint.x, startPoint.y, endPoint.x, endPoint.y);
    triangle.moveTo(triangleP[0].x, triangleP[0].y);
    triangle.lineTo(triangleP[1].x, triangleP[1].y);
    triangle.lineTo(triangleP[2].x, triangleP[2].y);
    triangle.close();
    paint.setStyle(Paint.Style.FILL);
    canvas.drawPath(triangle, paint);
    paint.setStyle(Paint.Style.STROKE);
}
 
Example 4
Source File: XRadarView.java    From XRadarView with MIT License 6 votes vote down vote up
public RectF getPathRect() {
    List<Point> list = new ArrayList<>();
    for (int i = 0; i < count; i++) {
        int x, y;
        x = (int) (centerX + percents[i] * radius * Math.cos(angle * i + Math.PI / 2));
        y = (int) (centerY - percents[i] * radius * Math.sin(angle * i + Math.PI / 2));
        Point p = new Point();
        p.set(x, y);
        list.add(p);
    }

    Path path = new Path();
    for (int i = 0; i < list.size(); i++) {
        if (i == 0) {
            path.moveTo(list.get(i).x, list.get(i).y);
        } else {
            path.lineTo(list.get(i).x, list.get(i).y);
        }
    }
    path.close();
    RectF rect = new RectF();
    path.computeBounds(rect, true);
    return rect;
}
 
Example 5
Source File: BubbleImageView.java    From LQRWeChat with MIT License 6 votes vote down vote up
public void rightPath(RectF rect, Path path) {
    path.moveTo(mAngle, rect.top);
    path.lineTo(rect.width(), rect.top);
    path.arcTo(new RectF(rect.right - mAngle * 2 - mArrowWidth, rect.top,
            rect.right - mArrowWidth, mAngle * 2 + rect.top), 270, 90);
    path.lineTo(rect.right - mArrowWidth, mArrowTop);
    path.lineTo(rect.right, mArrowTop - mArrowOffset);
    path.lineTo(rect.right - mArrowWidth, mArrowTop + mArrowHeight);
    path.lineTo(rect.right - mArrowWidth, rect.height() - mAngle);
    path.arcTo(new RectF(rect.right - mAngle * 2 - mArrowWidth, rect.bottom
            - mAngle * 2, rect.right - mArrowWidth, rect.bottom), 0, 90);
    path.lineTo(rect.left, rect.bottom);
    path.arcTo(new RectF(rect.left, rect.bottom - mAngle * 2, mAngle * 2
            + rect.left, rect.bottom), 90, 90);
    path.lineTo(rect.left, rect.top);
    path.arcTo(new RectF(rect.left, rect.top, mAngle * 2 + rect.left,
            mAngle * 2 + rect.top), 180, 90);
    path.close();
}
 
Example 6
Source File: BubbleImageView.java    From Tok-Android with GNU General Public License v3.0 6 votes vote down vote up
public void rightPath(RectF rect, Path path) {
    path.moveTo(mAngle, rect.top);
    path.lineTo(rect.width(), rect.top);
    path.arcTo(
        new RectF(rect.right - mAngle * 2 - mArrowWidth, rect.top, rect.right - mArrowWidth,
            mAngle * 2 + rect.top), 270, 90);
    path.lineTo(rect.right - mArrowWidth, mArrowTop);
    path.lineTo(rect.right, mArrowTop - mArrowOffset);
    path.lineTo(rect.right - mArrowWidth, mArrowTop + mArrowHeight);
    path.lineTo(rect.right - mArrowWidth, rect.height() - mAngle);
    path.arcTo(new RectF(rect.right - mAngle * 2 - mArrowWidth, rect.bottom - mAngle * 2,
        rect.right - mArrowWidth, rect.bottom), 0, 90);
    path.lineTo(rect.left, rect.bottom);
    path.arcTo(
        new RectF(rect.left, rect.bottom - mAngle * 2, mAngle * 2 + rect.left, rect.bottom), 90,
        90);
    path.lineTo(rect.left, rect.top);
    path.arcTo(new RectF(rect.left, rect.top, mAngle * 2 + rect.left, mAngle * 2 + rect.top),
        180, 90);
    path.close();
}
 
Example 7
Source File: FeatureImage.java    From fdroidclient with GNU General Public License v3.0 5 votes vote down vote up
/**
 * This requires the three points to be in a sequence that traces out a triangle in clockwise
 * fashion. This is required for the triangle to be filled correctly when drawing, otherwise
 * it will end up black.
 */
private static Path createTriangle(Point start, Point middle, Point end) {
    Path path = new Path();
    path.setFillType(Path.FillType.EVEN_ODD);
    path.moveTo(start.x, start.y);
    path.lineTo(middle.x, middle.y);
    path.lineTo(end.x, end.y);
    path.close();

    return path;
}
 
Example 8
Source File: ViewPagerIndicator.java    From NewFastFrame with Apache License 2.0 5 votes vote down vote up
/**
 * 根据title创建tab
 */
private View generateTextView(String title, int index, int size) {
    TextView tv = new TextView(getContext());
    tv.setText(title);
    tv.setGravity(Gravity.CENTER);
    tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, tabTextSize);
    LayoutParams lp;
    if (margin == 0) {
        lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        lp.width = 0;
        lp.weight = 1;
    } else {
        lp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
        if (index != size) {
            lp.setMargins(0, 0, margin, 0);
        }
    }
    tv.setLayoutParams(lp);
    if (mLineWidth == 0) {
        Rect bound = new Rect();
        tv.getPaint().getTextBounds(tv.getText().toString(), 0, tv.getText().length(), bound);
        mLineWidth = bound.width();
        mLineWidth += 20;
        mPath = new Path();
        mPath.moveTo(0, 0);
        mPath.lineTo(mLineWidth, 0);
        mPath.lineTo(mLineWidth, lineHeight);
        mPath.lineTo(0, lineHeight);
        mPath.close();
    }
    return tv;
}
 
Example 9
Source File: ViewPagerIndicator.java    From miappstore with Apache License 2.0 5 votes vote down vote up
/**
 * 初始化三角形指示器
 */
private void initTriangle()
{
	mPath = new Path();

	mTriangleHeight = (int) (mTriangleWidth / 2 / Math.sqrt(2));
	mPath.moveTo(0, 0);
	mPath.lineTo(mTriangleWidth, 0);
	mPath.lineTo(mTriangleWidth / 2, -mTriangleHeight);
	mPath.close();
}
 
Example 10
Source File: LabelViewHelper.java    From AvatarLabelView with MIT License 5 votes vote down vote up
public void drawLabel(View view, Canvas canvas) {
    if (canvas == null || view == null) {
        throw new IllegalArgumentException("LabelViewHelper draw canvas or view cant't be null!");
    }

    canvas.save();
    if (mRouteDegrees == ROTATE_LEFT){
        canvas.translate(-mBgTriangleWidth / 2, 0);
        canvas.rotate(mRouteDegrees, mBgTriangleWidth / 2, 0);
    }else if (mRouteDegrees == ROTATE_RIGHT){
        int rotateViewWH= (int) (mBgTriangleHeight * Math.sqrt(2));
        canvas.translate(view.getMeasuredWidth() - rotateViewWH, -mBgTriangleHeight);
        canvas.rotate(mRouteDegrees, 0, mBgTriangleHeight);
    }

    Path path = new Path();
    path.moveTo(0, mBgTriangleHeight);
    if (mTopDistance < 0) {
        // mTopDistance > 0 represents a trapezoid, otherwise represents a triangle.
        mTopDistance = 0;
    }
    path.lineTo(mBgTriangleWidth / 2 - mTopDistance, mTopDistance);
    path.lineTo(mBgTriangleWidth / 2 + mTopDistance, mTopDistance);
    path.lineTo(mBgTriangleWidth, mBgTriangleHeight);
    path.close();
    canvas.drawPath(path, mBgTrianglePaint);

    if (!TextUtils.isEmpty(mTextTitle)) {
        canvas.drawText(mTextTitle, (mBgTriangleWidth) / 2, mTopDistance + mTopPadding + mTextTitleRect.height(), mTextTitlePaint);
    }
    if (!TextUtils.isEmpty(mTextContent)) {
        canvas.drawText(mTextContent, (mBgTriangleWidth) / 2, (mTopDistance + mTopPadding + mTextTitleRect.height() + mCenterPadding + mTextContentRect.height()), mTextContentPaint);
    }

    canvas.restore();
}
 
Example 11
Source File: AccentRatingBar.java    From holoaccent with Apache License 2.0 5 votes vote down vote up
private Path getStarPath(float centerX, float centerY, float innerRadius, float outerRadius) {

        double angle = 2.0*Math.PI/10.0;
        float innerTopX = innerRadius*(float)Math.sin(angle);
        float innerTopY = innerRadius*(float)Math.cos(angle);
        float outerTopX = outerRadius*(float)Math.sin(2f*angle);
        float outerTopY = outerRadius*(float)Math.cos(2f*angle);
        float innerBottomX = innerRadius*(float)Math.sin(3f*angle);
        float innerBottomY = innerRadius*(float)Math.cos(3f*angle);
        float outerBottomX = outerRadius*(float)Math.sin(4f*angle);
        float outerBottomY = outerRadius*(float)Math.cos(4f*angle);

        Path result = new Path();
        result.moveTo(centerX, centerY - outerRadius);

        result.lineTo(centerX + innerTopX, centerY - innerTopY);
        result.lineTo(centerX + outerTopX, centerY - outerTopY);
        result.lineTo(centerX + innerBottomX, centerY - innerBottomY);
        result.lineTo(centerX + outerBottomX, centerY - outerBottomY);

        result.lineTo(centerX, centerY + innerRadius);

        result.lineTo(centerX - outerBottomX, centerY - outerBottomY);
        result.lineTo(centerX - innerBottomX, centerY - innerBottomY);
        result.lineTo(centerX - outerTopX, centerY - outerTopY);
        result.lineTo(centerX - innerTopX, centerY - innerTopY);

        result.close();
        return result;
    }
 
Example 12
Source File: RadiisImageView.java    From VideoOS-Android-SDK with GNU General Public License v3.0 5 votes vote down vote up
private void drawBottomLeft(Canvas canvas) {
    if ((radius[6] > 0) || (radius[7] > 0)) {
        int height = getHeight();
        Path path = new Path();
        path.moveTo(0, height - radius[7]);
        path.lineTo(0, height);
        path.lineTo(radius[6], height);
        path.arcTo(new RectF(0, height - 2 * radius[7],
                radius[6] * 2, height), 90, 90);
        path.close();
        canvas.drawPath(path, roundPaint);
    }
}
 
Example 13
Source File: VideoLoadingView.java    From VideoLoadingView with Apache License 2.0 5 votes vote down vote up
private void drawTriangleOnly(Canvas canvas) {
    Path p = new Path();
    p.moveTo((float) (radius - triangle_length / 2 * Math.sqrt(3) / 3), radius - triangle_length / 2);
    p.lineTo((float) (radius + triangle_length * Math.sqrt(3) / 3), radius);
    p.lineTo((float) (radius - triangle_length / 2 * Math.sqrt(3) / 3), radius + triangle_length / 2);
    p.close();
    canvas.drawPath(p, mTrianglePaint);
}
 
Example 14
Source File: RoundAngleImageView.java    From wallpaper with GNU General Public License v2.0 5 votes vote down vote up
private void drawLiftDown(Canvas canvas) {
	Path path = new Path();
	path.moveTo(0, getHeight() - roundHeight);
	path.lineTo(0, getHeight());
	path.lineTo(roundWidth, getHeight());
	path.arcTo(new RectF(0, getHeight() - roundHeight * 2, 0 + roundWidth * 2, getHeight()), 90, 90);
	path.close();
	canvas.drawPath(path, paint);
}
 
Example 15
Source File: PolygonView.java    From ShapeOfView with Apache License 2.0 5 votes vote down vote up
private void init(Context context, AttributeSet attrs) {
    if (attrs != null) {
        final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.PolygonView);
        final int sides = attributes.getInteger(R.styleable.PolygonView_shape_polygon_noOfSides, numberOfSides);

        numberOfSides = sides > 3 ? sides : numberOfSides;
        attributes.recycle();
    }

    super.setClipPathCreator(new ClipPathManager.ClipPathCreator() {
        @Override
        public Path createClipPath(int width, int height) {

            final float section = (float) (2.0 * Math.PI / numberOfSides);
            final int polygonSize = Math.min(width, height);
            final int radius = polygonSize / 2;
            final int centerX = width / 2;
            final int centerY = height / 2;

            final Path polygonPath = new Path();
            polygonPath.moveTo((centerX + radius * (float) Math.cos(0)), (centerY + radius * (float) Math.sin(0)));

            for (int i = 1; i < numberOfSides; i++) {
                polygonPath.lineTo((centerX + radius * (float) Math.cos(section * i)),
                        (centerY + radius * (float) Math.sin(section * i)));
            }

            polygonPath.close();
            return polygonPath;
        }

        @Override
        public boolean requiresBitmap() {
            return true;
        }
    });
}
 
Example 16
Source File: SVGAndroidRenderer.java    From XDroidAnimation with Apache License 2.0 5 votes vote down vote up
private Path makePathAndBoundingBox(SVG.Ellipse obj)
{
   float  cx = (obj.cx != null) ? obj.cx.floatValueX(this) : 0f;
   float  cy = (obj.cy != null) ? obj.cy.floatValueY(this) : 0f;
   float  rx = obj.rx.floatValueX(this);
   float  ry = obj.ry.floatValueY(this);

   float  left = cx - rx;
   float  top = cy - ry;
   float  right = cx + rx;
   float  bottom = cy + ry;

   if (obj.boundingBox == null) {
      obj.boundingBox = new Box(left, top, rx*2, ry*2);
   }

   float  cpx = rx * BEZIER_ARC_FACTOR;
   float  cpy = ry * BEZIER_ARC_FACTOR;

   Path  p = new Path();
   p.moveTo(cx, top);
   p.cubicTo(cx+cpx, top, right, cy-cpy, right, cy);
   p.cubicTo(right, cy+cpy, cx+cpx, bottom, cx, bottom);
   p.cubicTo(cx-cpx, bottom, left, cy+cpy, left, cy);
   p.cubicTo(left, cy-cpy, cx-cpx, top, cx, top);
   p.close();
   return p;
}
 
Example 17
Source File: GISDisplay.java    From android_maplib with GNU Lesser General Public License v3.0 4 votes vote down vote up
public void drawTextOnPath(
        String text,
        Path path,
        float hOffset,
        float vOffset,
        Paint paint)
{
    if (null == mMainCanvas) {
        return;
    }

    PathMeasure pm = new PathMeasure(path, false);
    Matrix matrix = new Matrix();
    Path charPath = new Path();
    Path textPath = new Path();

    float pathLength = pm.getLength();
    float coordinates[] = new float[2];
    float tangent[] = new float[2];

    int i = 0;
    float position = hOffset;

    while (i < text.length()) {
        String ch = text.substring(i, i + 1);
        float charWidth = paint.measureText(ch);

        float nextPosition = position + charWidth;
        if (nextPosition > pathLength) {
            break;
        }

        pm.getPosTan(position + charWidth / 2, coordinates, tangent);
        float rotateAngle = (float) Math.toDegrees(
                Math.atan2((double) tangent[1], (double) tangent[0]));

        charPath.reset();
        paint.getTextPath(ch, 0, ch.length(), -charWidth / 2, vOffset, charPath);
        charPath.close(); // workaround

        matrix.reset();
        matrix.postScale(1, -1, 0, 0);
        matrix.postRotate(rotateAngle, 0, 0);
        matrix.postTranslate(coordinates[0], coordinates[1]);

        textPath.addPath(charPath, matrix);

        ++i;
        position = nextPosition;
    }

    mMainCanvas.drawPath(textPath, paint);

    // for debug
    //mMainCanvas.drawTextOnPath(text, path, hOffset, vOffset, paint);
}
 
Example 18
Source File: RadarChartRenderer.java    From Ticket-Analysis with MIT License 4 votes vote down vote up
/**
 * Draws the RadarDataSet
 *
 * @param c
 * @param dataSet
 * @param mostEntries the entry count of the dataset with the most entries
 */
protected void drawDataSet(Canvas c, IRadarDataSet dataSet, int mostEntries) {

    float phaseX = mAnimator.getPhaseX();
    float phaseY = mAnimator.getPhaseY();

    float sliceangle = mChart.getSliceAngle();

    // calculate the factor that is needed for transforming the value to
    // pixels
    float factor = mChart.getFactor();

    MPPointF center = mChart.getCenterOffsets();
    MPPointF pOut = MPPointF.getInstance(0,0);
    Path surface = mDrawDataSetSurfacePathBuffer;
    surface.reset();

    boolean hasMovedToPoint = false;

    for (int j = 0; j < dataSet.getEntryCount(); j++) {

        mRenderPaint.setColor(dataSet.getColor(j));

        RadarEntry e = dataSet.getEntryForIndex(j);

        Utils.getPosition(
                center,
                (e.getY() - mChart.getYChartMin()) * factor * phaseY,
                sliceangle * j * phaseX + mChart.getRotationAngle(), pOut);

        if (Float.isNaN(pOut.x))
            continue;

        if (!hasMovedToPoint) {
            surface.moveTo(pOut.x, pOut.y);
            hasMovedToPoint = true;
        } else
            surface.lineTo(pOut.x, pOut.y);
    }

    if (dataSet.getEntryCount() > mostEntries) {
        // if this is not the largest set, draw a line to the center before closing
        surface.lineTo(center.x, center.y);
    }

    surface.close();

    if (dataSet.isDrawFilledEnabled()) {

        final Drawable drawable = dataSet.getFillDrawable();
        if (drawable != null) {

            drawFilledPath(c, surface, drawable);
        } else {

            drawFilledPath(c, surface, dataSet.getFillColor(), dataSet.getFillAlpha());
        }
    }

    mRenderPaint.setStrokeWidth(dataSet.getLineWidth());
    mRenderPaint.setStyle(Paint.Style.STROKE);

    // draw the line (only if filled is disabled or alpha is below 255)
    if (!dataSet.isDrawFilledEnabled() || dataSet.getFillAlpha() < 255)
        c.drawPath(surface, mRenderPaint);

    MPPointF.recycleInstance(center);
    MPPointF.recycleInstance(pOut);
}
 
Example 19
Source File: ArcView.java    From ShapeOfView with Apache License 2.0 4 votes vote down vote up
private void init(Context context, AttributeSet attrs) {
    if (attrs != null) {
        final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.ArcView);
        arcHeightPx = attributes.getDimensionPixelSize(R.styleable.ArcView_shape_arc_height, (int) arcHeightPx);
        arcPosition = attributes.getInteger(R.styleable.ArcView_shape_arc_position, arcPosition);
        attributes.recycle();
    }
    super.setClipPathCreator(new ClipPathManager.ClipPathCreator() {
        @Override
        public Path createClipPath(int width, int height) {
            final Path path = new Path();

            final boolean isCropInside = getCropDirection() == CROP_INSIDE;

            final float arcHeightAbs = Math.abs(arcHeightPx);

            switch (arcPosition) {
                case POSITION_BOTTOM: {
                    if (isCropInside) {
                        path.moveTo(0, 0);
                        path.lineTo(0, height);
                        path.quadTo(width / 2, height - 2 * arcHeightAbs, width, height);
                        path.lineTo(width, 0);
                        path.close();
                    } else {
                        path.moveTo(0, 0);
                        path.lineTo(0, height - arcHeightAbs);
                        path.quadTo(width / 2, height + arcHeightAbs, width, height - arcHeightAbs);
                        path.lineTo(width, 0);
                        path.close();
                    }
                    break;
                }
                case POSITION_TOP:
                    if (isCropInside) {
                        path.moveTo(0, height);
                        path.lineTo(0, 0);
                        path.quadTo(width / 2, 2 * arcHeightAbs, width, 0);
                        path.lineTo(width, height);
                        path.close();
                    } else {
                        path.moveTo(0, arcHeightAbs);
                        path.quadTo(width / 2, -arcHeightAbs, width, arcHeightAbs);
                        path.lineTo(width, height);
                        path.lineTo(0, height);
                        path.close();
                    }
                    break;
                case POSITION_LEFT:
                    if (isCropInside) {
                        path.moveTo(width, 0);
                        path.lineTo(0, 0);
                        path.quadTo(arcHeightAbs * 2, height / 2, 0, height);
                        path.lineTo(width, height);
                        path.close();
                    } else {
                        path.moveTo(width, 0);
                        path.lineTo(arcHeightAbs, 0);
                        path.quadTo(-arcHeightAbs, height / 2, arcHeightAbs, height);
                        path.lineTo(width, height);
                        path.close();
                    }
                    break;
                case POSITION_RIGHT:
                    if (isCropInside) {
                        path.moveTo(0, 0);
                        path.lineTo(width, 0);
                        path.quadTo(width - arcHeightAbs * 2, height / 2, width, height);
                        path.lineTo(0, height);
                        path.close();
                    } else {
                        path.moveTo(0, 0);
                        path.lineTo(width - arcHeightAbs, 0);
                        path.quadTo(width + arcHeightAbs, height / 2, width - arcHeightAbs, height);
                        path.lineTo(0, height);
                        path.close();
                    }
                    break;

            }
            return path;
        }

        @Override
        public boolean requiresBitmap() {
            return false;
        }
    });
}
 
Example 20
Source File: RadarChart.java    From Notification-Analyser with MIT License 2 votes vote down vote up
/**
 * Draws the limit lines if there are one.
 */
private void drawLimitLines() {

    ArrayList<LimitLine> limitLines = mOriginalData.getLimitLines();

    if (limitLines == null)
        return;

    float sliceangle = getSliceAngle();

    // calculate the factor that is needed for transforming the value to
    // pixels
    float factor = getFactor();

    PointF c = getCenterOffsets();

    for (int i = 0; i < limitLines.size(); i++) {

        LimitLine l = limitLines.get(i);

        mLimitLinePaint.setColor(l.getLineColor());
        mLimitLinePaint.setPathEffect(l.getDashPathEffect());
        mLimitLinePaint.setStrokeWidth(l.getLineWidth());

        float r = l.getLimit() * factor;

        Path limitPath = new Path();

        for (int j = 0; j < mCurrentData.getXValCount(); j++) {

            PointF p = getPosition(c, r, sliceangle * j + mRotationAngle);

            if (j == 0)
                limitPath.moveTo(p.x, p.y);
            else
                limitPath.lineTo(p.x, p.y);
        }

        limitPath.close();

        mDrawCanvas.drawPath(limitPath, mLimitLinePaint);
    }
}