Android WebView截取所有内容生成长图在5.0以上系统异常问题

来源:互联网 发布:aide表白源码 编辑:程序博客网 时间:2024/06/05 13:00

最近在做webview截取所有内容生成长图时出现一些问题,在Android5.0以下系统能正常生成长图,但是在5.0以上会出现只能截取第一屏的内容,剩下的全部为空白,查看资料发现原来是系统在5.0+版本上,Android对webview做了优化,为了减少内存占用以提高性能,因此在默认情况下会智能的绘制html中需要绘制的部分,其实就是当前屏幕展示的html内容,因此会出现未显示的图像是空白的。解决方法如下:



如上图:在activity的onCreate方法中的setContentView前加上一句enableSlowWholeDocumentDraw();意思为取消系统的智能绘制,当然这样之后性能会有所下降,但为了实现功能,也只能如此。

加上之后在Android5.0以下系统会崩溃,那是因为在5.0以下没有enableSlowWholeDocumentDraw()这个方法,因此需要做个判断,获取本机系统版本号,当版本号大于5.0则调用enableSlowWholeDocumentDraw()方法,否则不调用。

代码为:API=21即为Android5.0系统

if (android.os.Build.VERSION.SDK_INT >= 21) {    enableSlowWholeDocumentDraw();}
下面为生成长图代码:


public Bitmap viewShot(final View view) {    if (view == null)        return null;    view.setDrawingCacheEnabled(true);    view.buildDrawingCache();    int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);    view.measure(measureSpec, measureSpec);    if (view.getMeasuredWidth() <= 0 || view.getMeasuredHeight() <= 0) {        return null;    }    Bitmap bm;    try {        bm = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);    } catch (OutOfMemoryError e) {        System.gc();        try {            bm = Bitmap.createBitmap(view.getMeasuredWidth(), view.getMeasuredHeight(), Bitmap.Config.ARGB_8888);        } catch (OutOfMemoryError ee) {            return null;        }    }    Canvas bigCanvas = new Canvas(bm);    Paint paint = new Paint();    int iHeight = bm.getHeight();    bigCanvas.drawBitmap(bm, 0, iHeight, paint);    view.draw(bigCanvas);    showToast(getString(R.string.already_share_save_img));    return bm;}

完结...



阅读全文
1 0
原创粉丝点击