Criei uma subclassse de SurfaceView para abstrair operações de canvas, como drawBitmap (dentre outras), conforme mostrado abaixo: public class MyView extends SurfaceView { public MyView(Context c) { super(c); this.canvasHolder = this.getHolder(); this.canvasHolder.addCallback(surfaceHolderCallback); } public void drawBitmap(Bitmap bitmap, float width, float height, Paint p) { canvas.drawBitmap(bitmap, width, height, p); } private SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { canvas = holder.lockCanvas(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {} @Override public void surfaceDestroyed(SurfaceHolder holder) {} }; public void flush() { this.canvasHolder.unlockCanvasAndPost(this.canvas); this.canvas = this.canvasHolder.lockCanvas(); } A inicialização completa da SurfaceView depende do callback, na qual eu consigo acesso ao canvas que precisarei para manipular. De outra forma, eu recebo um NullpointerException na primeira chamada ao drawBitmap. O problema é que eu quero permitir o uso da classe de forma bem direta, como mostrado abaixo. Para tal, eu preciso abstrair todo esse mecanismo de inicialização com callback e garantir que o drawBitmap tem acesso a um canvas válido (not null). Alguma ideia de como fazer isso isso? MyView view = new MyView(getBaseContext()); String source = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/abc.png"; view.drawBitmap(BitmapFactory.decodeFile(source).copy(Bitmap.Config.ARGB_8888, true), 0, 0, null); view.flush(); Continue reading...