最近做项目遇到个问题,网上搜索了一下,很多人也遇到这个问题,觉得很有必要拿出来说一下,做个总结!嗯,内容精华,千万别错过!
项目具体的需求说起来又要大费周章说半天,我就直接简单地说下我们的目的是什么,很简单就是把拍摄的照片和自定义view原样显示(简单理解就是截屏)
如下图空白区域就是SurfaceView,空白区域的上方有个刻度尺,我们的目的就是要使拍摄的照片上存在这个刻度尺,这个刻度尺是自定义view是可调的(颜色,宽度,刻度间距等都可调)
初期我是没有想到截屏方案的,初期的方案 :将拍照前的尺子view画到拍摄后的图片上,但是画上去的view是初始时的view行不通
后来想到使用截屏功能,截屏后将图片进行裁剪只保留中间白色区域部分岂不快哉?嗯,感觉前途很光明啊,按下关机音量下按键,一阵舒爽的截屏声音后留下了一地的..额,不,是留下了一张图片,嗯很符合我的要求嘛.
于是就是网上烂大街的代码,不做过多解释,加几句注释方便各位理解
public static Bitmap takeScreenShot(Activity act) {
if (act == null || act.isFinishing()) {
Log.d(TAG, "act参数为空.");
return null;
}
// 获取当前视图的view ,获取顶层view视图,网上还有view.getRootView 其实本质都是一样的,就是获取根view(前台视图,你能看到的)
View scrView = act.getWindow().getDecorView();
scrView.setDrawingCacheEnabled(true);
scrView.buildDrawingCache(true);
// 获取状态栏高度
Rect statuBarRect = new Rect();
scrView.getWindowVisibleDisplayFrame(statuBarRect);
int statusBarHeight = statuBarRect.top;
int width = act.getWindowManager().getDefaultDisplay().getWidth();
int height = act.getWindowManager().getDefaultDisplay().getHeight();
Bitmap scrBmp = null;
try {
// 去掉标题栏的截图
scrBmp = Bitmap.createBitmap( scrView.getDraw