Android WebView截取所有内容生成长图在5.0以上系统异常问题
2017-12-01 15:30
585 查看
最近在做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系统
下面为生成长图代码:
完结...
如上图:在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, 9511 0, iHeight, paint); view.draw(bigCanvas); showToast(getString(R.string.already_share_save_img)); return bm; }
完结...
相关文章推荐
- 部分android手机WebView无法成功同步Cookie问题的解决方案(5.0系统以上)
- 解决android 5.0 webview不能加载http与https混合内容的问题
- Android截图包含webview时,webview部分空白(其他部分正常),此问题发生在系统4.4及以上
- Android截图包含webview时,webview部分空白(其他部分正常),此问题发生在系统4.4及以上
- webview在compileSdkVersion 大于等于23 android6.0以上系统执行js代码异常,但是在compileSdkVersion小于23 android6.0以下系统却执行正常问题
- 解决android 5.0 webview不能加载http与https混合内容的问题
- Android 6.0以上系统webview的onReceivedTitle问题
- 解决android 5.0 webview不能加载http与https混合内容的问题
- android4.4以上 webview加在图片的缩放问题
- android开发 友盟推送点击Notification使用WebView加载url同时会调用系统浏览器的问题
- Android-优化不同版本系统WebView版本兼容性问题
- Android 3.0 以上系统 webView 无法在html中传值的解决办法
- android webView 无法播放视频,无法暂停,继续播放视频问题,无法根据浏览器居中显示内容问题
- Android 5.0中使用webView 加载网页不显示图片问题
- Android Webview中Flash播放,在3.0及4.0以上系统全屏
- 魅族和三星Galaxy 5.0webView 问题Android Crash Report - Native crash at /system/lib/libc.so caused by webvi
- android中webview加载html,输入框不能输入内容问题记录
- android webview内容压线问题解决方法
- android webview内容压线问题解决方法
- android webview loadurl弹出系统浏览器问题