title: Extended SurfaceView's onDraw() method never called
body: <p>I'm trying to modify the SurfaceView I use for doing a camera preview in order to display an overlaying square. However, the onDraw method of the extended SurfaceView is never called.</p>
  
  <p>Here is the source :</p>
  
  <pre><code>public class CameraPreviewView extends SurfaceView {
  
      protected final Paint rectanglePaint = new Paint();
  
      public CameraPreviewView(Context context, AttributeSet attrs) {
          super(context, attrs);
          rectanglePaint.setARGB(255, 200, 0, 0);
          rectanglePaint.setStyle(Paint.Style.FILL);
          rectanglePaint.setStrokeWidth(2);
      }
  
      @Override
      protected void onDraw(Canvas canvas){
          canvas.drawRect(new Rect(10,10,200,200), rectanglePaint);
          Log.w(this.getClass().getName(), "On Draw Called");
      }
  }
  
  public class CameraPreview extends Activity implements SurfaceHolder.Callback{
  
      private SurfaceHolder holder;
      private Camera camera;
  
      @Override
      protected void onCreate(Bundle savedInstanceState){
          super.onCreate(savedInstanceState);
  
          // We remove the status bar, title bar and make the application fullscreen
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  
          // We set the content view to be the layout we made
          setContentView(R.layout.camera_preview);
  
          // We register the activity to handle the callbacks of the SurfaceView
          CameraPreviewView surfaceView = (CameraPreviewView) findViewById(R.id.camera_surface);
          holder = surfaceView.getHolder();
  
          holder.addCallback(this);
          holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
      }
  
      public void surfaceChanged(SurfaceHolder holder, int format, int width,
              int height) {
  
          Camera.Parameters params = camera.getParameters();
  
          params.setPreviewSize(width, height);
          camera.setParameters(params);
  
          try {
              camera.setPreviewDisplay(holder);
          } catch (IOException e) {
              e.printStackTrace();
          }
  
          camera.startPreview();
  
      }
  
      public void surfaceCreated(SurfaceHolder holder) {
          camera = Camera.open();
      }
  
      public void surfaceDestroyed(SurfaceHolder holder) {
          camera.stopPreview();
          camera.release();   
      }
  
  
  }
  </code></pre>