/** * {@link net.qiujuer.genius.ui.drawable.TouchEffectDrawable.ClipFactory} */ @Override public boolean clip(Canvas canvas) { return canvas.clipPath(mPath); }
...... final Path path = new Path(); path.addRoundRect(new RectF(0,0,getWidth(),getHeight()),10,10,Direction.CW); ...... @Override protected void dispatchDraw(Canvas canvas){ canvas.clipPath(path); super.dispatchDraw(canvas); }
@Override protected void drawNextPageAreaAndShadow(Canvas canvas) { canvas.save(); if (actiondownX > mScreenWidth >> 1) { canvas.clipPath(mPath0); canvas.drawBitmap(mNextPageBitmap, 0, 0, null); } else { canvas.clipPath(mPath0, Region.Op.XOR); canvas.drawBitmap(mNextPageBitmap, 0, 0, null); } try { canvas.restore(); } catch (Exception e) { } }
@Override protected void onDraw(Canvas canvas) { canvas.clipPath(mRoundedRectPath); super.onDraw(canvas); } }
/** * This method draws dimmed area around the crop bounds. * * @param canvas - valid canvas object */ protected void drawDimmedLayer(@NonNull Canvas canvas) { canvas.save(); if (mCircleDimmedLayer) { canvas.clipPath(mCircularPath, Region.Op.DIFFERENCE); } else { canvas.clipRect(mCropViewRect, Region.Op.DIFFERENCE); } canvas.drawColor(mDimmedColor); canvas.restore(); if (mCircleDimmedLayer) { // Draw 1px stroke to fix antialias canvas.drawCircle(mCropViewRect.centerX(), mCropViewRect.centerY(), Math.min(mCropViewRect.width(), mCropViewRect.height()) / 2.f, mDimmedStrokePaint); } }
protected void onDraw(Canvas canvas) { Path clipPath = new Path(); float radius = 10.0f; float padding = radius / 2; int w = this.getWidth(); int h = this.getHeight(); clipPath.addRoundRect(new RectF(padding, padding, w - padding, h - padding), radius, radius, Path.Direction.CW); canvas.clipPath(clipPath); super.onDraw(canvas); }
@Override protected void draw(Canvas canvas, Path path, Paint paint) { if (isFirst) { isFirst = false; start(); } else { int sc = canvas.save(); canvas.clipPath(path); canvas.drawCircle(mPoint.x, mPoint.y, mRadius, paint); canvas.restoreToCount(sc); } }
@Override protected void drawCurrentPageArea(Canvas canvas) { mPath0.reset(); mPath0.moveTo(mBezierStart1.x, mBezierStart1.y); mPath0.quadTo(mBezierControl1.x, mBezierControl1.y, mBezierEnd1.x, mBezierEnd1.y); mPath0.lineTo(mTouch.x, mTouch.y); mPath0.lineTo(mBezierEnd2.x, mBezierEnd2.y); mPath0.quadTo(mBezierControl2.x, mBezierControl2.y, mBezierStart2.x, mBezierStart2.y); mPath0.lineTo(mCornerX, mCornerY); mPath0.close(); canvas.save(); canvas.clipPath(mPath0, Region.Op.XOR); canvas.drawBitmap(mCurPageBitmap, 0, 0, null); try { canvas.restore(); } catch (Exception e) { } }
/** * Draws the provided path in filled mode with the provided color and alpha. * Special thanks to Angelo Suzuki (https://github.com/tinsukE) for this. * * @param c * @param filledPath * @param fillColor * @param fillAlpha */ protected void drawFilledPath(Canvas c, Path filledPath, int fillColor, int fillAlpha) { int color = (fillAlpha << 24) | (fillColor & 0xffffff); if (clipPathSupported()) { int save = c.save(); c.clipPath(filledPath); c.drawColor(color); c.restoreToCount(save); } else { // save Paint.Style previous = mRenderPaint.getStyle(); int previousColor = mRenderPaint.getColor(); // set mRenderPaint.setStyle(Paint.Style.FILL); mRenderPaint.setColor(color); c.drawPath(filledPath, mRenderPaint); // restore mRenderPaint.setColor(previousColor); mRenderPaint.setStyle(previous); } }
/** * Draws the provided path in filled mode with the provided drawable. * * @param c * @param filledPath * @param drawable */ protected void drawFilledPath(Canvas c, Path filledPath, Drawable drawable) { if (clipPathSupported()) { int save = c.save(); c.clipPath(filledPath); drawable.setBounds((int) mViewPortHandler.contentLeft(), (int) mViewPortHandler.contentTop(), (int) mViewPortHandler.contentRight(), (int) mViewPortHandler.contentBottom()); drawable.draw(c); c.restoreToCount(save); } else { throw new RuntimeException("Fill-drawables not (yet) supported below API level 18, " + "this code was run on API level " + Utils.getSDKInt() + "."); } }
@Override protected void drawGrid(Canvas canvas, RectF cropBounds, Paint paint) { clipPath.rewind(); clipPath.addOval(cropBounds, Path.Direction.CW); canvas.save(Canvas.CLIP_SAVE_FLAG); canvas.clipPath(clipPath); super.drawGrid(canvas, cropBounds, paint); canvas.restore(); }
@Override public void transform(Canvas canvas, float currentFillPhase, View view) { cacheDimensions(view.getWidth(), view.getHeight()); buildClippingPath(); spikesPath.offset(0, height * -currentFillPhase); canvas.clipPath(spikesPath, Region.Op.DIFFERENCE); }
@Override protected void dispatchDraw(Canvas canvas) { if (isPreLollipop()) { int save = canvas.save(); canvas.clipPath(path); super.dispatchDraw(canvas); canvas.restoreToCount(save); } else { super.dispatchDraw(canvas); } }
@Override public void transform(Canvas canvas, float currentFillPhase, View view) { cacheDimensions(view.getWidth(), view.getHeight()); Path path = buildClippingPath(); path.offset(0, height * -currentFillPhase); canvas.clipPath(path, Region.Op.DIFFERENCE); }
@Override public void transform(Canvas canvas, float currentFillPhase, View view) { cacheDimensions(view.getWidth(), view.getHeight()); Path path = buildClippingPath(); path.offset(0, height * -currentFillPhase); canvas.clipPath(path, Region.Op.DIFFERENCE); }
@Override public void transform(Canvas canvas, float currentFillPhase, View view) { cacheDimensions(view.getWidth(), view.getHeight()); buildClippingPath(); roundedPath.offset(0, height * -currentFillPhase); canvas.clipPath(roundedPath, Region.Op.DIFFERENCE); }
@Override public void transform(Canvas canvas, float currentFillPhase, View view) { cacheDimensions(view.getWidth(), view.getHeight()); buildClippingPath(); wavesPath.offset(0, height * -currentFillPhase); canvas.clipPath(wavesPath, Region.Op.DIFFERENCE); }
@Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { if(mRunning && child == mRevealInfo.getTarget()){ final int state = canvas.save(); mRevealPath.reset(); mRevealPath.addCircle(mRevealInfo.centerX, mRevealInfo.centerY, mRadius, Path.Direction.CW); canvas.clipPath(mRevealPath); boolean isInvalided = super.drawChild(canvas, child, drawingTime); canvas.restoreToCount(state); return isInvalided; } return super.drawChild(canvas, child, drawingTime); }
@Override protected boolean drawChild(Canvas canvas, View child, long drawingTime) { if(mRunning && child == mRevealInfo.getTarget()){ final int state = canvas.save(); mRevealPath.reset(); mRevealPath.addCircle(mRevealInfo.centerX, mRevealInfo.centerY, mRadius, Path.Direction.CW); canvas.clipPath(mRevealPath); boolean isInvalided = super.drawChild(canvas, child, drawingTime); canvas.restoreToCount(state); return isInvalided; } return super.drawChild(canvas, child, drawingTime); }
@Override protected void onDraw(Canvas canvas) { if (!noDash) { drawDash(canvas); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { canvas.clipOutPath(clipPath); } else { canvas.clipPath(clipPath, Region.Op.XOR); } } super.onDraw(canvas); }