Aandroid截屏遇到SurfaceView

最近做项目遇到个问题,网上搜索了一下,很多人也遇到这个问题,觉得很有必要拿出来说一下,做个总结!嗯,内容精华,千万别错过!

项目具体的需求说起来又要大费周章说半天,我就直接简单地说下我们的目的是什么,很简单就是把拍摄的照片和自定义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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值