Снимок экрана из кода - PullRequest
       27

Снимок экрана из кода

4 голосов
/ 16 февраля 2011

Мне нужно сделать снимок экрана текущего экрана, поэтому я принял приведенный ниже код на

protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();

    LinearLayout v = (LinearLayout) findViewById(R.id.mainLayout);
    v.setDrawingCacheEnabled(true);
    // this is the important code :)
    // Without it the view will have a
    // dimension of 0,0 and the bitmap will
    // be null
    v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    //v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    v.layout(0, 0, v.getWidth(), v.getHeight());
    v.buildDrawingCache(true);
    Bitmap bm = Bitmap.createBitmap(v.getDrawingCache());
    v.setDrawingCacheEnabled(false); //

    if (bm != null) {
        try {
            String path = Environment.getExternalStorageDirectory()
                    .toString();
            OutputStream fOut = null;
            File file = new File(path, "screentest.jpg");
            fOut = new FileOutputStream(file);

            bm.compress(Bitmap.CompressFormat.JPEG, 85, fOut);
            fOut.flush();
            fOut.close();

            Log.e("ImagePath", "Image Path : "
                    + MediaStore.Images.Media.insertImage(
                            getContentResolver(), file.getAbsolutePath(),
                            file.getName(), file.getName()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Этот код отлично сработал, но мне нужно сделать снимок экрана сразу после окончания загрузки экрана.

Я также попробовал onPostCReate (), но все идет напрасно.

Я также пытался вызвать код в методе onPause (), но из-за анимации экран немного обрезается справа и снизу ... поэтому я даже не могу пойти на это ...

Теперь ваша очередь поделиться своим опытом ..

Любые предложения приветствуются !!!!

1 Ответ

4 голосов
/ 16 февраля 2011

Попробуйте это:

public void onCreate(Bundle savedInstanceState) {
    LinearLayout v = (LinearLayout) findViewById(R.id.mainLayout);
    v.setDrawingCacheEnabled(true);
    v.post(new Runnable() {
        public void run() {
             // Code to take screenshot
        });
    }

}
...