title: Detect if the user has painted the whole screen
body: <p>I'm letting the user to do painting in my app.The app will show some options on the screen once the whole screen is painted. And I want to check if the user has painted the whole screen.</p>
  
  <p>Is there a way to detect if the user has painted the whole screen? Like an event triggered after the whole screen is painted.</p>
  
  <p>Following is my code for painting:</p>
  
  <pre><code>    public class DrawingView extends View {
      public int width;
      public int height;
      private Bitmap mBitmap;
      private Canvas mCanvas;
      private Path mPath;
      private Paint mBitmapPaint;
      Context context;
      private Paint circlePaint;
      private Path circlePath;
      Stack mXStack;
      Stack mYStack;
  
      public DrawingView(Context c) {
          super(c);
          context = c;
          mPath = new Path();
          mXStack = new Stack();
          mYStack = new Stack();
          mBitmapPaint = new Paint(Paint.DITHER_FLAG);
          circlePaint = new Paint();
          circlePath = new Path();
          circlePaint.setAntiAlias(true);
          circlePaint.setColor(Color.BLUE);
          circlePaint.setStyle(Paint.Style.STROKE);
          circlePaint.setStrokeJoin(Paint.Join.MITER);
          circlePaint.setStrokeWidth(50f);
      }
  
      @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);
  
          canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
          canvas.drawPath(mPath, mPaint);
          canvas.drawPath(circlePath, circlePaint);
      }
  
      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);
          circlePath.reset();
          // commit the path to our offscreen
          mCanvas.drawPath(mPath, mPaint);
          // kill this so we don't double draw
          mPath.reset();
      }
  
      @Override
      public boolean onTouchEvent(MotionEvent 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>