Example usage for android.graphics Canvas drawPath

List of usage examples for android.graphics Canvas drawPath

Introduction

In this page you can find the example usage for android.graphics Canvas drawPath.

Prototype

public void drawPath(@NonNull Path path, @NonNull Paint paint) 

Source Link

Document

Draw the specified path using the specified paint.

Usage

From source file:com.jrummyapps.android.widget.AnimatedSvgView.java

@SuppressLint("DrawAllocation")
@Override//  ww  w.j  a va2s .  c  o m
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    if (mState == STATE_NOT_STARTED || mGlyphData == null) {
        return;
    }

    long t = System.currentTimeMillis() - mStartTime;

    // Draw outlines (starts as traced)
    if (t < mFillStart + mFillTime) {
        for (int i = 0; i < mGlyphData.length; i++) {
            float phase = constrain(0, 1, (t - (mTraceTime - mTraceTimePerGlyph) * i * 1f / mGlyphData.length)
                    * 1f / mTraceTimePerGlyph);
            float distance = INTERPOLATOR.getInterpolation(phase) * mGlyphData[i].length;
            mGlyphData[i].paint.setColor(mTraceResidueColors[i]);
            mGlyphData[i].paint
                    .setPathEffect(new DashPathEffect(new float[] { distance, mGlyphData[i].length }, 0));
            canvas.drawPath(mGlyphData[i].path, mGlyphData[i].paint);

            mGlyphData[i].paint.setColor(mTraceColors[i]);
            mGlyphData[i].paint.setPathEffect(new DashPathEffect(
                    new float[] { 0, distance, phase > 0 ? mMarkerLength : 0, mGlyphData[i].length }, 0));
            canvas.drawPath(mGlyphData[i].path, mGlyphData[i].paint);
        }
    }

    if (t > mFillStart && t < mFillStart + mFillTime) {
        if (mState < STATE_FILL_STARTED) {
            changeState(STATE_FILL_STARTED);
        }

        // If after fill start, draw fill
        float phase = constrain(0, 1, (t - mFillStart) * 1f / mFillTime);
        for (int i = 0; i < mGlyphData.length; i++) {
            GlyphData glyphData = mGlyphData[i];
            int fillColor = mFillColors[i];
            int a = (int) (phase * ((float) Color.alpha(fillColor) / (float) 255) * 255);
            int r = Color.red(fillColor);
            int g = Color.green(fillColor);
            int b = Color.blue(fillColor);
            mFillPaint.setARGB(a, r, g, b);

            canvas.drawPath(glyphData.path, mFillPaint);
        }
    }

    if (t > mFillStart + mFillTime) {
        float phase = (t - mDisappearTime - mFillStart) * 1f / mFillTime;
        if (phase < 0)
            phase = 0;
        else if (phase > 1)
            phase = 1;

        for (int i = 0; i < mGlyphData.length; i++) {
            GlyphData glyphData = mGlyphData[i];
            int fillColor = mFillColors[i];
            int a = 255 - (int) (phase * ((float) Color.alpha(fillColor) / (float) 255) * 255);
            int r = Color.red(fillColor);
            int g = Color.green(fillColor);
            int b = Color.blue(fillColor);
            mFillPaint.setARGB(a, r, g, b);
            canvas.drawPath(glyphData.path, mFillPaint);

            mGlyphData[i].paint.setAlpha(a);
            canvas.drawPath(mGlyphData[i].path, mGlyphData[i].paint);

        }

    }

    if (t < mFillStart + mDisappearTime + mFillTime) {
        // draw next frame if animation isn't finished
        ViewCompat.postInvalidateOnAnimation(this);
    } else {
        changeState(STATE_FINISHED);
    }
}

From source file:com.lovejjfg.arsenal.ui.widget.JumpBall.java

/**
 * ?/*from   w  ww.  j a v  a 2  s . c o  m*/
 * ? 8 9 10  - dx  4 3 2 ? + dx  5 6 7 + dy  11 0 1 
 */
private void drawCirclePath(Canvas canvas) {
    resetPoints();
    p0.y += mTranslateValue;
    p6.y += mTranslateValue;
    p1.y += mTranslateValue;
    p2.y += mTranslateValue + mChange * 0.5;
    p3.y += mTranslateValue + mChange * 0.5;
    p4.y += mTranslateValue + mChange * 0.5;
    p5.y += mTranslateValue;
    p7.y += mTranslateValue;
    p8.y += mTranslateValue + mChange * 0.5;
    p9.y += mTranslateValue + mChange * 0.5;
    p10.y += mTranslateValue + mChange * 0.5;
    p11.y += mTranslateValue;

    p8.x -= mChange;
    p9.x -= mChange;
    p10.x -= mChange;

    p4.x += mChange;
    p3.x += mChange;
    p2.x += mChange;

    p5.y += mChange;
    p6.y += mChange;
    p7.y += mChange;

    mPath.reset();
    mPath.moveTo(p0.x, p0.y);
    mPath.cubicTo(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y);
    mPath.cubicTo(p4.x, p4.y, p5.x, p5.y, p6.x, p6.y);
    mPath.cubicTo(p7.x, p7.y, p8.x, p8.y, p9.x, p9.y);
    mPath.cubicTo(p10.x, p10.y, p11.x, p11.y, p0.x, p0.y);
    canvas.drawPath(mPath, mPaint);
}

From source file:com.filemanager.free.ui.views.Indicator.java

private void drawUnselected(Canvas canvas) {

    combinedUnselectedPath.rewind();//from  w w  w .j  a  va  2  s.  c o m

    // draw any settled, revealing or joining dots
    for (int page = 0; page < pageCount; page++) {
        int nextXIndex = page == pageCount - 1 ? page : page + 1;
        combinedUnselectedPath.addPath(getUnselectedPath(page, dotCenterX[page], dotCenterX[nextXIndex],
                page == pageCount - 1 ? INVALID_FRACTION : joiningFractions[page], dotRevealFractions[page]));
    }
    // draw any retreating joins
    if (retreatingJoinX1 != INVALID_FRACTION) {
        combinedUnselectedPath.addPath(getRetreatingJoinPath());
    }
    canvas.drawPath(combinedUnselectedPath, unselectedPaint);
}

From source file:com.lovejjfg.demo.TouchCircleView.java

/**
 * /*from w  ww.j  a  va 2  s  . c o  m*/
 */
private void drawHook(Canvas canvas) {
    mHook.reset();
    mHook.moveTo(innerRectf.centerX() - innerRectf.width() * 0.25f * fraction, innerRectf.centerY());
    mHook.lineTo(innerRectf.centerX() - innerRectf.width() * 0.1f * fraction,
            innerRectf.centerY() + innerRectf.height() * 0.18f * fraction);
    mHook.lineTo(innerRectf.centerX() + innerRectf.width() * 0.25f * fraction,
            innerRectf.centerY() - innerRectf.height() * 0.20f * fraction);
    mCurrentRectf = outRectF;
    mCurrentPaint = paint;
    resetPoints();
    drawCirclePath(canvas);
    canvas.drawPath(mHook, mHookPaint);

}

From source file:net.networksaremadeofstring.rhybudd.RhybuddDock.java

private void drawGaugeNeedle(Canvas canvas, int count, int Scale) {
    canvas.save(Canvas.MATRIX_SAVE_FLAG);
    float divisor = 360.0f / Scale;

    canvas.rotate((float) (divisor * count), 100, 100);

    //Inside/*  ww w  .j a v a 2  s.c  o  m*/
    Paint needleInsidePaint = new Paint();
    needleInsidePaint.setStyle(Paint.Style.FILL_AND_STROKE);
    needleInsidePaint.setColor(Color.WHITE);
    needleInsidePaint.setStrokeWidth(4);
    needleInsidePaint.setAntiAlias(true);

    Paint needleEdgePaint = new Paint();
    needleEdgePaint.setStyle(Paint.Style.STROKE);
    needleEdgePaint.setColor(Color.DKGRAY);
    needleEdgePaint.setStrokeWidth(0.5f);
    needleEdgePaint.setAntiAlias(true);

    canvas.drawOval(new RectF(95, 95, 105, 105), needleInsidePaint);
    canvas.drawOval(new RectF(95, 96, 105, 105), needleEdgePaint);

    Path needleInside = new Path();
    needleInside.moveTo(98, 98);
    needleInside.lineTo(100, 20);
    needleInside.lineTo(102, 102);
    canvas.drawPath(needleInside, needleInsidePaint);

    Path needleEdge = new Path();
    needleInside.moveTo(99, 99);
    needleInside.lineTo(99, 19);
    needleInside.lineTo(103, 103);

    canvas.drawPath(needleEdge, needleEdgePaint);
    canvas.restore();
}

From source file:com.android.camera.HighlightView.java

void draw(Canvas canvas) {
    if (mHidden) {
        return;/*w  w w. jav a 2 s. com*/
    }
    canvas.save();
    Path path = new Path();
    if (!hasFocus()) {
        mOutlinePaint.setColor(0xFF000000);
        canvas.drawRect(mDrawRect, mOutlinePaint);
    } else {
        Rect viewDrawingRect = new Rect();
        mContext.getDrawingRect(viewDrawingRect);
        if (mCircle) {
            float width = mDrawRect.width();
            float height = mDrawRect.height();
            path.addCircle(mDrawRect.left + (width / 2), mDrawRect.top + (height / 2), width / 2,
                    Path.Direction.CW);
            mOutlinePaint.setColor(mOutlineCircleColor);
        } else {
            path.addRect(new RectF(mDrawRect), Path.Direction.CW);
            mOutlinePaint.setColor(mOutlineColor);
        }
        canvas.clipPath(path, Region.Op.DIFFERENCE);
        canvas.drawRect(viewDrawingRect, hasFocus() ? mFocusPaint : mNoFocusPaint);

        canvas.restore();
        canvas.drawPath(path, mOutlinePaint);

        if (mMode == ModifyMode.Grow) {
            if (mCircle) {
                int width = mResizeDrawableDiagonal.getIntrinsicWidth();
                int height = mResizeDrawableDiagonal.getIntrinsicHeight();

                int d = (int) Math.round(Math.cos(/*45deg*/Math.PI / 4D) * (mDrawRect.width() / 2D));
                int x = mDrawRect.left + (mDrawRect.width() / 2) + d - width / 2;
                int y = mDrawRect.top + (mDrawRect.height() / 2) - d - height / 2;
                mResizeDrawableDiagonal.setBounds(x, y, x + mResizeDrawableDiagonal.getIntrinsicWidth(),
                        y + mResizeDrawableDiagonal.getIntrinsicHeight());
                mResizeDrawableDiagonal.draw(canvas);
            } else {
                int left = mDrawRect.left + 1;
                int right = mDrawRect.right + 1;
                int top = mDrawRect.top + 4;
                int bottom = mDrawRect.bottom + 3;

                int widthWidth = mResizeDrawableWidth.getIntrinsicWidth() / 2;
                int widthHeight = mResizeDrawableWidth.getIntrinsicHeight() / 2;
                int heightHeight = mResizeDrawableHeight.getIntrinsicHeight() / 2;
                int heightWidth = mResizeDrawableHeight.getIntrinsicWidth() / 2;

                int xMiddle = mDrawRect.left + ((mDrawRect.right - mDrawRect.left) / 2);
                int yMiddle = mDrawRect.top + ((mDrawRect.bottom - mDrawRect.top) / 2);

                mResizeDrawableWidth.setBounds(left - widthWidth, yMiddle - widthHeight, left + widthWidth,
                        yMiddle + widthHeight);
                mResizeDrawableWidth.draw(canvas);

                mResizeDrawableWidth.setBounds(right - widthWidth, yMiddle - widthHeight, right + widthWidth,
                        yMiddle + widthHeight);
                mResizeDrawableWidth.draw(canvas);

                mResizeDrawableHeight.setBounds(xMiddle - heightWidth, top - heightHeight,
                        xMiddle + heightWidth, top + heightHeight);
                mResizeDrawableHeight.draw(canvas);

                mResizeDrawableHeight.setBounds(xMiddle - heightWidth, bottom - heightHeight,
                        xMiddle + heightWidth, bottom + heightHeight);
                mResizeDrawableHeight.draw(canvas);
            }
        }
    }
}

From source file:lollipop.iconics.IconicsDrawable.java

@Override
public void draw(Canvas canvas) {
    if (mIcon != null || mPlainIcon != null) {
        final Rect viewBounds = getBounds();

        updatePaddingBounds(viewBounds);
        updateTextSize(viewBounds);//from   ww  w.  j  a v  a2  s  .c  o  m
        offsetIcon(viewBounds);

        if (mBackgroundPaint != null && mRoundedCornerRy > -1 && mRoundedCornerRx > -1) {
            canvas.drawRoundRect(new RectF(0, 0, viewBounds.width(), viewBounds.height()), mRoundedCornerRx,
                    mRoundedCornerRy, mBackgroundPaint);
        }

        mPath.close();

        if (mDrawContour) {
            canvas.drawPath(mPath, mContourPaint);
        }

        mIconPaint.setAlpha(mAlpha);

        canvas.drawPath(mPath, mIconPaint);
    }
}

From source file:com.amaze.carbonfilemanager.ui.views.Indicator.java

private void drawUnselected(Canvas canvas) {

    combinedUnselectedPath.rewind();//  w ww  . j a  va  2  s . c  om

    // draw any settled, revealing or joining dots
    for (int page = 0; page < pageCount; page++) {
        int nextXIndex = page == pageCount - 1 ? page : page + 1;
        combinedUnselectedPath.op(getUnselectedPath(page, dotCenterX[page], dotCenterX[nextXIndex],
                page == pageCount - 1 ? INVALID_FRACTION : joiningFractions[page], dotRevealFractions[page]),
                Path.Op.UNION);
    }
    // draw any retreating joins
    if (retreatingJoinX1 != INVALID_FRACTION) {
        combinedUnselectedPath.op(getRetreatingJoinPath(), Path.Op.UNION);
    }
    canvas.drawPath(combinedUnselectedPath, unselectedPaint);
}

From source file:com.journeyapps.barcodescanner.WXViewfinderView.java

@SuppressLint("DrawAllocation")
@Override/* w  ww  . j  ava2  s. c  om*/
public void onDraw(Canvas canvas) {
    refreshSizes();
    if (framingRect == null || previewFramingRect == null) {
        return;
    }

    Rect frame = framingRect;
    Rect previewFrame = previewFramingRect;

    int width = canvas.getWidth();
    int height = canvas.getHeight();

    maskPaint.setColor(maskColor);
    canvas.drawRect(0, 0, width, frame.top, maskPaint);
    canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, maskPaint);
    canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, maskPaint);
    canvas.drawRect(0, frame.bottom + 1, width, height, maskPaint);
    //drawable the border
    canvas.drawRect(frame.left + 1, frame.top + 1, frame.right, frame.bottom, borderPaint);
    int halfWidth = (int) (cornerWidth / 2);
    //draw four corner
    Path corner1 = new Path();
    corner1.moveTo(frame.left, frame.top + cornerLength);
    corner1.lineTo(frame.left, frame.top);
    corner1.lineTo(frame.left + cornerLength, frame.top);
    Matrix translate1 = new Matrix();
    translate1.setTranslate(halfWidth, halfWidth);
    corner1.transform(translate1);
    canvas.drawPath(corner1, cornerPaint);

    Path corner2 = new Path();
    corner2.moveTo(frame.right + 1 - cornerLength, frame.top);
    corner2.lineTo(frame.right + 1, frame.top);
    corner2.lineTo(frame.right + 1, frame.top + cornerLength);
    Matrix translate2 = new Matrix();
    translate2.setTranslate(-halfWidth, halfWidth);
    corner2.transform(translate2);
    canvas.drawPath(corner2, cornerPaint);

    Path corner3 = new Path();
    corner3.moveTo(frame.left, frame.bottom + 1 - cornerLength);
    corner3.lineTo(frame.left, frame.bottom + 1);
    corner3.lineTo(frame.left + cornerLength, frame.bottom + 1);
    Matrix translate3 = new Matrix();
    translate3.setTranslate(halfWidth, -halfWidth);
    corner3.transform(translate3);
    canvas.drawPath(corner3, cornerPaint);

    Path corner4 = new Path();
    corner4.moveTo(frame.right + 1 - cornerLength, frame.bottom + 1);
    corner4.lineTo(frame.right + 1, frame.bottom + 1);
    corner4.lineTo(frame.right + 1, frame.bottom + 1 - cornerLength);
    Matrix translate4 = new Matrix();
    translate4.setTranslate(-halfWidth, -halfWidth);
    corner4.transform(translate4);
    canvas.drawPath(corner4, cornerPaint);

    offset += speed;
    if (offset >= frame.bottom - frame.top) {
        offset = 0;
    }
    Rect rect = new Rect();
    rect.left = frame.left + 1 + laserPadding;
    rect.top = frame.top + 1 + offset;
    rect.right = frame.right - laserPadding;
    rect.bottom = frame.top + 1 + offset + 3;

    Bitmap laserBitmap = ((BitmapDrawable) ResourcesCompat.getDrawable(getResources(), R.drawable.scan_laser,
            null)).getBitmap();
    canvas.drawBitmap(laserBitmap, null, rect, linePaint);

    textPaint.setTextAlign(Paint.Align.CENTER);

    canvas.drawText(statusText, (frame.right + frame.left) / 2,
            frame.bottom + statusTextPadding + statusTextSize, textPaint);

    postInvalidateDelayed(animationDelay, frame.left, frame.top, frame.right, frame.bottom);

}

From source file:com.github.jokar.rxupload.widget.ProgressDownloadView.java

/**
 * MARK: Overrides/*  w  w  w .  j a  v a 2s  .co m*/
 */

@Override
protected void onDraw(Canvas canvas) {
    if (mPathWhite != null && mPathBlack != null) {

        float textX = Math.max(getPaddingLeft() - (int) (mBubbleWidth / 4.0f),
                mProgress * mWidth / 100 - (int) (mBubbleWidth / 4.0f));
        float textY = mHeight / 2 - mBubbleHeight / 2 + calculateDeltaY();

        switch (mState) {
        case STATE_WORKING:
            // Save and restore prevent the rest of the canvas to not be rotated
            canvas.save();
            float speed = (getProgress() - mTarget) / 20;
            mBubbleAngle += speed * 10;
            if (mBubbleAngle > 20) {
                mBubbleAngle = 20;
            }
            if (mBubbleAngle < -20) {
                mBubbleAngle = -20;
            }
            if (Math.abs(speed) < 1) {
                mSpeedAngle -= mBubbleAngle / 20;
                mSpeedAngle *= .9f;
            }
            mBubbleAngle += mSpeedAngle;

            canvas.rotate(mBubbleAngle, bubbleAnchorX, bubbleAnchorY);
            canvas.drawPath(mPathBubble, mPaintBubble);
            canvas.drawText(String.valueOf((int) mProgress) + " %", textX, textY, mPaintText);
            canvas.restore();
            break;
        case STATE_FAILED:
            canvas.save();
            canvas.rotate(mFailAngle, bubbleAnchorX, bubbleAnchorY);
            canvas.drawPath(mPathBubble, mPaintBubble);
            canvas.rotate(mFailAngle, bubbleAnchorX, textY - mBubbleHeight / 7);
            //                    mPaintText.setColor(getResources().getColor(R.color.red_wine));
            textX = Math.max(getPaddingLeft() - (int) (mBubbleWidth / 3.2f),
                    mProgress * mWidth / 100 - (int) (mBubbleWidth / 3.2f));
            canvas.drawText(getResources().getString(R.string.failed), textX, textY, mPaintText);
            canvas.restore();
            break;
        case STATE_SUCCESS:
            canvas.save();
            //                    mPaintText.setColor(getResources().getColor(R.color.green_grass));
            textX = Math.max(getPaddingLeft() - (int) (mBubbleWidth / 3.2f),
                    mProgress * mWidth / 100 - (int) (mBubbleWidth / 3.2f));
            Matrix flipMatrix = new Matrix();
            flipMatrix.setScale(mFlipFactor, 1, bubbleAnchorX, bubbleAnchorY);
            canvas.concat(flipMatrix);
            canvas.drawPath(mPathBubble, mPaintBubble);
            canvas.concat(flipMatrix);
            canvas.drawText(getResources().getString(R.string.done), textX, textY, mPaintText);
            canvas.restore();
            break;
        }

        canvas.drawPath(mPathBlack, mPaintBlack);
        canvas.drawPath(mPathWhite, mPaintWhite);
    }
}