我想截取我的应用程序的屏幕截图,在一个活动中,我有SurfaceView,它包含了瓷砖贴图。
点击一个按钮,我执行屏幕捕获代码并在对话框中显示它以及一个edittext和两个按钮。
在SO和互联网上使用各种帖子,我尝试了以下代码段:
样本1)
View v1 = getWindow().getDecorView().getRootView();
v1.setDrawingCacheEnabled(true);
bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
样本2)
bitmap = Bitmap.createBitmap(v1.getWidth(),
v1.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
v1.draw(canvas);
样本3)
mDrawerLayout.setDrawingCacheEnabled(true);
mDrawerLayout.buildDrawingCache(true);
bitmap = Bitmap.createBitmap(mDrawerLayout.getDrawingCache());
mDrawerLayout.setDrawingCacheEnabled(false);
样本4)
bitmap = Bitmap.createBitmap(mDrawerLayout.getWidth(),
mDrawerLayout.getHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
mDrawerLayout.draw(canvas);
现在我最接近我的要求的是样本1代码本身。检查下面的图像是否相同。
请注意,我无法正确保存实际图像,即SD卡上的图像1。但至少使用第一个代码片段,它会显示在对话框中。
另请注意,对于普通屏幕(没有画布),此代码工作正常,但是当使用SurfaceView进行查看时,这会失败。
请查看以下图片的说明:
图片1:实际应用程序屏幕 - 使用设备在正常状态下捕获屏幕截图的功能获取此屏幕截图
图片2:实际应用程序屏幕 - 在执行以编程方式截取屏幕截图的代码时,使用设备捕获屏幕截图的功能获取此屏幕截图
图3:以编程方式捕获屏幕截图后保存在SD卡上的图像
我做错了吗?任何帮助表示赞赏。