android搞個截圖
實現
1.單個view的截圖
2.webview的截長圖
3.scrollView的截圖
4.截圖
1.單個View的截圖
View.getDrawingCache
通過view的cache來獲取view的截圖
view.setDrawingCacheEnabled(true);//開啟view快取 view.buildDrawingCache();//通知view生產繪圖快取 Bitmap bitmap = view.getDrawingCache();//獲取view的截圖 view.setDrawingCacheEnabled(false); view.destroyDrawingCache();//銷燬快取
2.webview的截圖
mWebView.capturePicture()
重點是webView的capturePicture()方法
Picture snapShot = mWebView.capturePicture();//傳入webview物件 final Bitmap bmp = Bitmap.createBitmap(snapShot.getWidth(),snapShot.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmp); snapShot.draw(canvas);
3.scrollView的截圖
scrollView的截圖比較特殊,因為他存在長圖;
如果我們仍然使用第一種方法來獲取截圖,我們會碰到超出快取的警告 (View too large to fit into drawing cache)
在這時候,scrollview的getheight()高度是子view的實際高度,而子view還沒完全顯示,他的高度是大於螢幕高度的,所以會提示超出快取。
public static Bitmap shotScrolleView(View view) { Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); view.measure(View.MeasureSpec.makeMeasureSpec(view.getWidth(), View.MeasureSpec.EXACTLY), View.MeasureSpec.makeMeasureSpec(view.getHeight(), View.MeasureSpec.EXACTLY)); view.layout((int) view.getX(), (int) view.getY(), (int) view.getX() + view.getMeasuredWidth(), (int) view.getY() + view.getMeasuredHeight()); view.draw(canvas); return bitmap; }
4.截圖
截圖原理和方法一類似,重點是獲取到decorView,然後使用和方法一樣
public void screenShot(Activity activity) { View dView = activity.getWindow().getDecorView();//重點 dView.setDrawingCacheEnabled(true); dView.buildDrawingCache(); Bitmap bitmap = Bitmap.createBitmap(dView.getDrawingCache()); saveToLocal(bitmap,"screenshot.jpeg"); }