title: canvas erase bitmap code android
body: <p>I am using below code to erase bitmap from canvas on touch event.</p>
  
  <p>it's working fine in android 2.3 but in 4.0 it show me black spot instead of erasing bitmap.</p>
  
  <p>anyone can help.</p>
  
  <p>public class DemoTouch extends Activity {</p>
  
  <pre><code>@Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(new TouchView(this));
  
  }
  
  class TouchView extends View {
      Bitmap bgr;
      Bitmap overlayDefault;
      Bitmap overlay;
      Paint pTouch;
      int X = -100;
      int Y = -100;
      Canvas c2;
  
      public TouchView(Context context) {
          super(context);
  
          bgr = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
          overlayDefault = BitmapFactory.decodeResource(getResources(),
                  R.drawable.a2);
          overlay = BitmapFactory.decodeResource(getResources(),
                  R.drawable.a2).copy(Config.ARGB_4444, true);
          c2 = new Canvas(overlay);
  
          pTouch = new Paint(Paint.ANTI_ALIAS_FLAG);
          pTouch.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
          pTouch.setColor(Color.TRANSPARENT);
          pTouch.setMaskFilter(new BlurMaskFilter(15, Blur.NORMAL));
          pTouch.setAntiAlias(true);
  
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent ev) {
  
          switch (ev.getAction()) {
  
          case MotionEvent.ACTION_DOWN: {
  
              X = (int) ev.getX();
              Y = (int) ev.getY();
              invalidate();
  
              break;
          }
  
          case MotionEvent.ACTION_MOVE: {
  
              X = (int) ev.getX();
              Y = (int) ev.getY();
              invalidate();
              break;
  
          }
  
          case MotionEvent.ACTION_UP:
  
              break;
  
          }
          return true;
      }
  
      @Override
      public void onDraw(Canvas canvas) {
          super.onDraw(canvas);
  
          // draw background
          canvas.drawBitmap(bgr, 0, 0, null);
          // copy the default overlay into temporary overlay and punch a hole
          // in it
          // c2.drawBitmap(overlayDefault, 0, 0, null); // exclude this line
          // to
          // show all as you draw
          c2.drawCircle(X, Y, 20, pTouch);
          // draw the overlay over the background
          canvas.drawBitmap(overlay, 0, 0, null);
  
      }
  
  }
  </code></pre>
  
  <p>}</p>