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
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を制限して共有できない可能性があります.オリジナルの共有を使用すると問題を解決できます.