我正在做一个非常简单的任务,从我的webView截取到Bitmap的截图...我这样做:
webView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(webView.getDrawingCache(false));
webView.setDrawingCacheEnabled(false);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
问题是最终的位图始终显示在我的网页内容的顶部!我实际上需要它来截取我滚动内容的截图,但这不是简单的发生!我一直在网上搜索两个小时,但似乎没有其他人有类似的问题。什么可能出错?
答案 0 :(得分:2)
我猜,这是在Lollipop上?如果是这样,请确保在第一次调用使用WebView扩展布局的setContentView()
之前调用WebView.enableSlowWholeDocumentDraw()(doc)。
答案 1 :(得分:0)
我遇到了同样的问题,并以下列方式解决了这个问题:
在WebView.enableSlowWholeDocumentDraw()
之前先呼叫setContentView()
。然后截取Web视图全部内容的屏幕截图,然后将位图裁剪为具有所需滚动偏移量的实际视图大小:
// the minimum bitmap height needs to be the view height
int bitmapHeight = (webView.getMeasuredHeight() < webView.getContentHeight())
? webView.getContentHeight() : webView.getMeasuredHeight();
Bitmap bitmap = Bitmap.createBitmap(
webView.getMeasuredWidth(), bitmapHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
// prevent IllegalArgumentException for createBitmap:
// y + height must be <= bitmap.height()
int scrollOffset = (scrollTo + webView.getMeasuredHeight() > bitmap.getHeight())
? bitmap.getHeight() : scrollTo;
Bitmap resized = Bitmap.createBitmap(
bitmap, 0, scrollOffset, bitmap.getWidth(), webView.getMeasuredHeight());
答案 2 :(得分:0)
这对我有用...
首先,在LinearLayout中添加Webview。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/layoutWeb"
>
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webview"/>
</LinearLayout>
第二,在onCreate()方法中初始化视图...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webview);
webLayout = (LinearLayout) findViewById(R.id.layoutWeb);
....
}
第三,编写一个用于截取屏幕截图的函数...在这里, View v1 = webLayout; 指定要为其截取屏幕快照的视图。
public void takeScreenshot() {
try{
View v1 = webLayout;
v1.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
v1.setDrawingCacheEnabled(false);
String mPath = Environment.getExternalStorageDirectory().toString() + "/screenshot.jpg";
File imageFile = new File(mPath);
FileOutputStream outputStream = new FileOutputStream(imageFile);
int quality = 100;
bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
outputStream.flush();
outputStream.close();
} catch(Throwable e) {
e.printStackTrace();
}
这将截取webLayout涵盖的部分的屏幕截图。向下滚动以专注于其他区域并拍摄webView的屏幕截图。
答案 3 :(得分:0)
实际上,您不需要最后两行,只需删除它们即可。
webView.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(webView.getDrawingCache(false));
webView.setDrawingCacheEnabled(false);
根据我所见,将返回您所需的位图。