Note that there are some explanatory texts on larger screens.

plurals
  1. POPorterDuffXfermode drawing black line with CLEAR mode
    primarykey
    data
    text
    <p>I have an imageView with background and foreground image. When I try to erase by foreground using Path and Paint with Clear setting, instead of deleting the foreground path its drawing black lines. Can someone help me please?</p> <p>Here is my code snippet</p> <pre><code> public class ShowBackgrounOnDrawImage extends ImageView { private static final float MINP = 0.25f; private static final float MAXP = 0.75f; private Bitmap mBitmap, blur = null; private Canvas mCanvas; private Path mPath; private Paint mBitmapPaint; public boolean imageLoaded = false; private Canvas imageCanvas = null; Context here; Long width = null, height = null; private Paint mPaint; public BlurOnDrawImage(Context c) { super(c); initialize(); } public BlurOnDrawImage(Context context, AttributeSet attrs) { super(context, attrs); initialize(); } public BlurOnDrawImage(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initialize(); } private void initialize() { mPath = new Path(); mPaint = new Paint(); mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); mPaint.setColor(Color.TRANSPARENT); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeWidth(10f); mPaint.setAntiAlias(true); mBitmapPaint = new Paint(Paint.DITHER_FLAG); mBitmapPaint.setStrokeWidth(80f); } public void setBitmap(Bitmap bitmap) { mBitmap = bitmap; mCanvas = new Canvas(bitmap); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); //mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); // mCanvas = new Canvas(mBitmap); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (imageLoaded) { canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); canvas.drawPath(mPath, mPaint); //canvas.drawPath(circlePath, circlePaint); } else { //imageCanvas = canvas; } } private float mX, mY; private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } private void touch_move(float x, float y) { float dx = Math.abs(x - mX); float dy = Math.abs(y - mY); if (dx &gt;= TOUCH_TOLERANCE || dy &gt;= TOUCH_TOLERANCE) { mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2); mX = x; mY = y; } //circlePath.reset(); //circlePath.addCircle(mX, mY, 30, Path.Direction.CW); } private void touch_up() { mPath.lineTo(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); // kill this so we don't double draw //circlePath.reset(); mPath.reset(); } @Override public boolean onTouchEvent(MotionEvent event) { if (!imageLoaded) { return super.onTouchEvent(event); } float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate(); break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } } </code></pre> <p>Thanks</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload