I had the same challenge and came to the conclusion that overwriting onDraw will at least in the general case not work. My blog explains the reasons. What worked very well for me is the following:
- Create a new image bitmap and attach a brand new canvas to it.
- Draw the image bitmap into the canvas.
- Draw everything else you want into the canvas.
- Attach the canvas to the ImageView.
Here is a code snippet for this:
import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; ImageView myImageView = ... Bitmap myBitmap = ... Paint myRectPaint = ... int x1 = ... int y1 = ... int x2 = ... int y2 = ... //Create a new image bitmap and attach a brand new canvas to it Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth(), myBitmap.getHeight(), Bitmap.Config.RGB_565); Canvas tempCanvas = new Canvas(tempBitmap); //Draw the image bitmap into the cavas tempCanvas.drawBitmap(myBitmap, 0, 0, null); //Draw everything else you want into the canvas, in this example a rectangle with rounded edges tempCanvas.drawRoundRect(new RectF(x1,y1,x2,y2), 2, 2, myPaint); //Attach the canvas to the ImageView myImageView.setImageDrawable(new BitmapDrawable(getResources(), tempBitmap));