How to take screenshot of a DrawingSurface programatically
<p>I am coding an app,in which user can select an image from the gallery an d can paintbrush on it using DrawingSurface, now i want to take a programatically screenshot of the view. Screenshot of an activity is already done by me, but i cannot able to take the screenshot of DrawingSurface. Below is my XML code</p>

<pre><code>&lt;RelativeLayout 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" &gt;

&lt;Holi_app.in.DrawingSurface
    android:id="@+id/drawingSurface"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" /&gt;

&lt;LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal" &gt;


&lt;/LinearLayout&gt;

&lt;/RelativeLayout&gt;
</code></pre>

<p>This is my Java Class</p>

<pre><code>public class DrawingSurface extends SurfaceView implements SurfaceHolder.Callback 
{


private Boolean _run;
protected DrawThread thread;
Bitmap mBitmap;
Context context;
int flag=0;
String mImagePath;
File file;  
String savedFilePath = "";
private boolean isFileAlreadySaved = false;

private CommandManager commandManager;
private Canvas canvas;   

SurfaceView v;

public DrawingSurface(Context context, AttributeSet attrs)
{
    super(context, attrs);

    String tag=PreferenceConnector.readString(context, PreferenceConnector.IMAGE_TAG,"ab"); 

     if(tag.equals("ab"))
     {
         mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.abdraw); 
     }


    getHolder().addCallback(this);


    commandManager = new CommandManager();
    thread = new DrawThread(getHolder());


}


class DrawThread extends  Thread
{
    private SurfaceHolder mSurfaceHolder;


    public DrawThread(SurfaceHolder surfaceHolder)
    {
        mSurfaceHolder = surfaceHolder;

    }

    public void setRunning(boolean run)
    {
        _run = run;
    }


    DrawingActivity image=new DrawingActivity();

    @Override
    public void run() 
    {
        Canvas canvas = null;

        while (_run)
        {
            try
            {                   



                canvas = mSurfaceHolder.lockCanvas(null);                
                canvas.drawBitmap(mBitmap, 0, 0, null);
                commandManager.executeAll(canvas);
                    mSurfaceHolder.unlockCanvasAndPost(canvas);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }

        }

    }


}


public void addDrawingPath (DrawingPath drawingPath)
{
    commandManager.addCommand(drawingPath);
}

public boolean hasMoreRedo()
{
    return commandManager.hasMoreRedo();
}

public void redo()
{
    commandManager.redo();
}

public void undo()
{
    commandManager.undo();
}

public boolean hasMoreUndo()
{
    return commandManager.hasMoreRedo();
}


public void surfaceChanged(SurfaceHolder holder, int format, int width,  int height)
{
    // TODO Auto-generated method stub
}

public void surfaceCreated(SurfaceHolder holder) 
{
    // TODO Auto-generated method stub
    thread.setRunning(true);
    thread.start();
}

public void surfaceDestroyed(SurfaceHolder holder) 
{
    // TODO Auto-generated method stub
    boolean retry = true;
    thread.setRunning(false);
    while (retry) 
    {
        try 
        {
            thread.join();
            retry = false;
        }
        catch (InterruptedException e) 
        {
            // we will try it again and again...
        }
    }
}
public void Save(String mImagePath, String savedFilePath2)
{

   this.mImagePath=mImagePath;  
   this.savedFilePath=savedFilePath2;
   System.out.println("here imagepath"+mImagePath);
   if(isFileAlreadySaved == false)
   {
                this.setDrawingCacheEnabled(true);
       mBitmap=getDrawingCache();
         Calendar currentDate = Calendar.getInstance();
          SimpleDateFormat formatter= new SimpleDateFormat("yyyyMMMddHmmss");
          String dateNow = formatter.format(currentDate.getTime());          
          file = new File(savedFilePath);
          FileOutputStream fos;
          try {
           fos = new FileOutputStream(file);
           mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
           fos.close();
           isFileAlreadySaved = true;
          } 
          catch (FileNotFoundException e)
          {
           Log.e("Panel", "FileNotFoundException", e);
          } 
          catch (IOException e) {
           Log.e("Panel", "IOEception", e);
       }

}
    }

    }
</code></pre>
