代码的屏幕截图

发布于 2024-10-17 13:28:53 字数 1695 浏览 5 评论 0原文

我需要捕获当前屏幕的屏幕截图,因此我采用了下面的代码。

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() 方法中的代码,但由于动画,屏幕从右侧和底部稍微修剪了一下...所以我什至不能去追求它......

现在轮到你分享你的专业知识了..

非常感谢任何建议!!!!

I need to capture the screen shot of the present screen so I adopted the code below on the

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();
        }
    }
}

This code has worked fine for me but I need to capture the screen just after the screen loading is finished.

I have also tried the onPostCReate() but all goes to vain..

I also tried to call the code in the onPause() method but due to animation, the screen is triming a bit from the right and the bottom portion... so I cant even go for it...

Now its your turn to share your expertise..

Any suggestions are greatly appreciated!!!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

耶耶耶 2024-10-24 13:28:53

试试这个:

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
        });
    }

}

Try this:

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
        });
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文