如何使用View.MeasureSpec在Android中截取片段的滚动屏幕截图?

时间:2015-07-23 11:18:42

标签: android android-fragments screenshot

我想以编程方式截取片段。屏幕截图必须包括用户尚未看到的部分,即活动的未展开部分。

方法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

有人可以指导我如何继续吗?

0 个答案:

没有答案