Android WebView超長図スクリーンショットを実現
1394 ワード
需要:webViewがロードした超長ページは、クリックしてページ全体を微信、モーメンツに共有する必要があります.
考え:
1.システムはスクリーンを切り取って、スクリーンの大きさを切り取ることしかできなくて、要求を満たしません.
2.ビューを画像として保存
⑴一般ビュー
private Bitmap loadBitmapFromView(View v) {
int w = v.getWidth();
int h = v.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
c.drawColor(Color.WHITE);/**canvasキャンバスを白に設定しないと、透明*/
v.layout(0, 0, w, h);
v.draw(c);
return bmp;
}
⑵WebView
WebViewが提供する方法を使用して長さを計算すると、5.0以上では保存不全が表示される可能性があります.5.0以上で最適化が行われている場合は、まず一部をレンダリングし、スクロールしてからレンダリングすると、
ソリューションActivity setContent()の前にページ全体のレンダリングを設定
共有するときはページが長すぎて画像がぼやけているため、圧縮しないで共有SDKを制限して共有できない可能性があります.オリジナルの共有を使用すると問題を解決できます.
考え:
1.システムはスクリーンを切り取って、スクリーンの大きさを切り取ることしかできなくて、要求を満たしません.
2.ビューを画像として保存
⑴一般ビュー
private Bitmap loadBitmapFromView(View v) {
int w = v.getWidth();
int h = v.getHeight();
Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
c.drawColor(Color.WHITE);/**canvasキャンバスを白に設定しないと、透明*/
v.layout(0, 0, w, h);
v.draw(c);
return bmp;
}
⑵WebView
private static Bitmap captureWebView(WebView webView) {
Picture snapShot = webView.capturePicture();
Bitmap bitmap = Bitmap.createBitmap(snapShot.getWidth(),
snapShot.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(bitmap);
snapShot.draw(canvas);
return bitmap;
}
WebViewが提供する方法を使用して長さを計算すると、5.0以上では保存不全が表示される可能性があります.5.0以上で最適化が行われている場合は、まず一部をレンダリングし、スクロールしてからレンダリングすると、
ソリューションActivity setContent()の前にページ全体のレンダリングを設定
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
WebView.enableSlowWholeDocumentDraw();
}
共有するときはページが長すぎて画像がぼやけているため、圧縮しないで共有SDKを制限して共有できない可能性があります.オリジナルの共有を使用すると問題を解決できます.