我想以编程方式截取片段。屏幕截图必须包括用户尚未看到的部分,即活动的未展开部分。
方法1
我已提到this question on StackOverflow并实施了此代码:
public boolean takeScreenShot() {
Bitmap bitmap = getScreenBitmap();
return saveBitmap(bitmap); // function to save the screenshot as a JPEG on the device
}
public Bitmap getScreenBitmap() {
if (mFragment == null) return null; //mFragment is the Fragment whose screenshot I need
View v = mFragment.getView(); //getView returns the rootView of the Fragment
v.setDrawingCacheEnabled(true);
/*The line causing trouble: v.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));*/
v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
v.draw(c);
v.setDrawingCacheEnabled(false);
return bitmap;
}
如果我使用v.measure()
行评论执行上述代码,我会得到一个常规屏幕截图(不包括尚未滚动的部分)。
如果我删除评论并执行,应用程序崩溃,我收到此错误:
java.lang.IllegalArgumentException: width and height must be > 0
at android.graphics.Bitmap.createBitmap(Bitmap.java:810)
at android.graphics.Bitmap.createBitmap(Bitmap.java:789)
at android.graphics.Bitmap.createBitmap(Bitmap.java:756)
at com.company.mypackage.custom.MyTestActivity.getScreenBitmap(MyTestActivity.java:180)
方法2
如果我用
替换上面代码段中的createBitmap
行
Bitmap b = Bitmap.createBitmap(v.getDrawingCache());
我在此行获得NullPointerException
因为v.getDrawingCache()
返回null。
方法3
我已经尝试了PGSSoft's scrollscreenshot tool并在下载了必要的软件包后执行了这个命令(我已经检查过我的模拟器的设备编号是5,我正在正确的目录中执行它)
java -cp scrollscreenshot-latest.jar com.pgssoft.scrollscreenshot.ScrollScreenShot -i 5
这给了我这个错误:
Error: Could not find or load main class com.pgssoft.scrollscreenshot.ScrollScreenShot
有人可以指导我如何继续吗?