captura de pantalla en android

El siguiente es el código que estoy usando para tomar una captura de pantalla usando GLSurfaceView. Pero no sé por qué no se llama al método onDraw () en la clase GLSurfaceView.Renderer.

Por favor, si alguien puede mirar el código a continuación y señalar qué estoy haciendo mal.

public class MainActivity extends Activity {

    private GLSurfaceView mGLView;
    int x,y,w,h;
    Display disp;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        // ToDo add your GUI initialization code here

        setContentView(R.layout.main);
        x=0;
        y=0;

        disp = getWindowManager().getDefaultDisplay();

        w = disp.getWidth();
        h = disp.getHeight();

       mGLView = new ClearGLSurfaceView(this);


    }

    class ClearGLSurfaceView extends GLSurfaceView {
    public ClearGLSurfaceView(Context context) {
        super(context);
        setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
        mRenderer = new ClearRenderer();
        setRenderer(mRenderer);
    }

        ClearRenderer mRenderer;
}


    class ClearRenderer implements GLSurfaceView.Renderer {

    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        // Do nothing special.
    }

    public void onSurfaceChanged(GL10 gl, int w, int h) {
        //gl.glViewport(0, 0, w, h);
    }

    public void onDrawFrame(GL10 gl) {
        //gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
        int b[]=new int[w*(y+h)];

         int bt[]=new int[w*h];

         IntBuffer ib=IntBuffer.wrap(b);

         ib.position(0);

         gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);



         for(int i=0, k=0; i<h; i++, k++)

         {//remember, that OpenGL bitmap is incompatible with Android bitmap

          //and so, some correction need.

              for(int j=0; j<w; j++)

              {

                   int pix=b[i*w+j];

                   int pb=(pix>>16)&0xff;

                   int pr=(pix<<16)&0x00ff0000;

                   int pix1=(pix&0xff00ff00) | pr | pb;

                   bt[(h-k-1)*w+j]=pix1;

              }

         }




         Bitmap bmp = Bitmap.createBitmap(bt, w, h,Bitmap.Config.ARGB_8888);

         try

                {
                        File f = new File("/sdcard/testpicture.png");
                        f.createNewFile();
                        FileOutputStream fos=new FileOutputStream(f);

                        bmp.compress(CompressFormat.PNG, 100, fos);

                        try

                        {

                                fos.flush();

                        }

                        catch (IOException e)

                        {

                                // TODO Auto-generated catch block

                                e.printStackTrace();

                        }

                        try

                        {

                                fos.close();

                        }

                        catch (IOException e)

                        {

                                // TODO Auto-generated catch block

                                e.printStackTrace();

                        }



                }

                catch (FileNotFoundException e)

                {

                        // TODO Auto-generated catch block

                        e.printStackTrace();

                }
                catch(IOException e)
                {
                    e.printStackTrace();
                }

    }
}

}

Por favor, que alguien me ayude. Acabo de comenzar a aprender a trabajar en Android.

Respuestas a la pregunta(1)

Su respuesta a la pregunta