前言
最近項目里有用到截圖肮之,總結(jié)一些用法崩掘。
截圖
/**
* 截取除了導(dǎo)航欄之外的整個屏幕
*/
private Bitmap screenShotWholeScreen() {
View dView = getWindow().getDecorView();
dView.setDrawingCacheEnabled(true);
dView.buildDrawingCache();
Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache());
return bitmap;
}
獲取View在屏幕可見區(qū)域的截圖
/**
* 獲取View在屏幕可見區(qū)域的截圖
*/
private Bitmap screenShotView(View view) {
//開啟緩存功能
view.setDrawingCacheEnabled(true);
//創(chuàng)建緩存
view.buildDrawingCache();
//獲取緩存Bitmap
Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
return bitmap;
}
webview截圖
webview很多時候都是滾動顯示html态秧。所及截的圖也是長圖。這里分為兩種情況處理靡馁。
5.0以下:
/**
* 對WebView進(jìn)行截屏欲鹏,雖然使用過期方法,但在當(dāng)前Android版本中測試可行
* @param webView
* @return
*/
private static Bitmap captureWebViewKitKat(WebView webView) {
Picture picture = webView.capturePicture();
int width = picture.getWidth();
int height = picture.getHeight();
if (width > 0 && height > 0) {
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
picture.draw(canvas);
return bitmap;
}
return null;
}
}
5.0以上:
5.0以上的版本對webview有優(yōu)化臭墨,webveiw只繪制顯示部分赔嚎。如果截長圖需要在初始化頁面之前先關(guān)閉優(yōu)化。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
WebView.enableSlowWholeDocumentDraw();
}
setContentView(R.layout.activity_test);
使用以下方法截圖:
private void captureWebViewLollipop(WebView webView) {
float scale = webView.getScale();
int width = webView.getWidth();
int height = (int) (webView.getContentHeight() * scale + 0.5);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(bitmap);
webView.draw(canvas);
return bitmap;
}
相關(guān)資料: