Android 截圖
二、具體實現方式
1),第一種實現方式
-
/**
-
* 對View進行量測,佈局後截圖
-
*
-
* @param view
-
* @return
-
*/
-
public Bitmap convertViewToBitmap(View view) {
-
view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
-
view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
-
view.setDrawingCacheEnabled(true);
-
view.buildDrawingCache();
-
Bitmap bitmap = view.getDrawingCache();
-
return bitmap;
-
}
此種實現方式,基本可以實現所有View的截圖及全螢幕的截圖。
在實際的需求中,是對WebView進行截圖,且WebView的展示中,是使用繪製程式繪製部分內容。這種方式,繪製的內容截圖展示不出來,只能另尋他法。
2)第二種實現方式
-
/**
-
* 獲取整個視窗的截圖
-
*
-
* @param context
-
* @return
-
*/
-
@SuppressLint("NewApi")
-
private Bitmap captureScreen(Activity context) {
-
View cv = context.getWindow().getDecorView();
-
cv.setDrawingCacheEnabled(true);
-
cv.buildDrawingCache();
-
Bitmap bmp = cv.getDrawingCache();
-
if (bmp == null) {
-
return null;
-
}
-
bmp.setHasAlpha(false);
-
bmp.prepareToDraw();
-
return bmp;
-
}
3),第三種實現方式【實質是將view作為原圖繪製出來】
-
/**
-
* 對單獨某個View進行截圖
-
*
-
* @param v
-
* @return
-
*/
-
private Bitmap loadBitmapFromView(View v) {
-
if (v == null) {
-
return null;
-
}
-
Bitmap screenshot;
-
screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.RGB_565);
-
Canvas c = new Canvas(screenshot);
-
c.translate(-v.getScrollX(), -v.getScrollY());
-
v.draw(c);
-
return screenshot;
-
}
4),第四種實現方式【針對WebView的實現方式】
-
/**
-
* 對WebView進行截圖
-
*
-
* @param webView
-
* @return
-
*/
-
public static Bitmap captureWebView1(WebView webView) {//可執行
-
Picture snapShot = webView.capturePicture();
-
Bitmap bmp = Bitmap.createBitmap(snapShot.getWidth(),
-
snapShot.getHeight(), Bitmap.Config.ARGB_8888);
-
Canvas canvas = new Canvas(bmp);
-
snapShot.draw(canvas);
-
return bmp;
-
}