Android 任意區域截圖
阿新 • • 發佈:2018-12-29
1、全屏截圖
Android其實可以做到任意區域截圖,不過我們先來看看整個螢幕截圖程式碼,相信大家很熟悉,程式碼如下
View decorView = activity.getWindow().getDecorView();
decorView.setDrawingCacheEnabled(true);
view.buildDrawingCache();
//獲取螢幕整張圖片
Bitmap bitmap = decorView.getDrawingCache();
上述程式碼中的bitmap就是當前螢幕的截圖的bitmap,獲取bitmap後大家自行處理自己業務就可以了。。。
2、區域截圖
法1:View.getDrawingCache()
關鍵程式碼如下:
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
注意:如果你的view恰好是textview且恰好你沒有給它設定背景,那麼很不幸你獲取的bitmap看到的是黑色的,它並不是你所期望的那樣哦,解決方案點它
其實還有另外一種方法就是,從全屏圖片中裁剪中我們需要的圖片,告訴系統裁剪圖片的起始座標以及的大小,參見下面方法。
法2:Bitmap.createBitmap (Bitmap source, int x, int y, int width, int height)
從官方文件來看,source代表原始的圖片;(x,y)代表從source圖片中起始點開始裁剪,width,height表示裁剪圖片的大小。
/**
*
* @param view 需要擷取圖片的view
* @return 截圖
*/
private Bitmap getBitmap(View view) throws Exception {
View screenView = getWindow().getDecorView();
screenView.setDrawingCacheEnabled(true);
screenView.buildDrawingCache();
//獲取螢幕整張圖片
Bitmap bitmap = screenView.getDrawingCache();
if (bitmap != null) {
//需要擷取的長和寬
int outWidth = view.getWidth();
int outHeight = view.getHeight();
//獲取需要截圖部分的在螢幕上的座標(view的左上角座標)
int[] viewLocationArray = new int[2];
view.getLocationOnScreen(viewLocationArray);
//從螢幕整張圖片中擷取指定區域
bitmap = Bitmap.createBitmap(bitmap, viewLocationArray[0], viewLocationArray[1], outWidth, outHeight);
}
return bitmap;
}
上述程式碼只要傳入你需要擷取的圖的view就可以返回對應的bitmap,也不需要管它是textview且有沒有設定背景,是不是很方便?