Android Activity背景截图并模糊处理

话不多说先上效果此处我是以DrawerLayout为例 当抽屉打开的时候将抽屉覆盖的位置变为毛玻璃效果


将虚化后的背景设置到Drawer上

实现思路其实很简单分为三步
1.将整个屏幕除去状态栏截屏存为Bitmap
2.对这个Bitmap进行高斯模糊处理
3.将处理后的图片设置为DrawerLayout的背景或者是任何你想实现效果的ImageView上


中间有一些小窍门和小细节听我娓娓到来

首先我们需要定义三个变量

    //状态栏高度
    private var statusBarHeight=0
    //屏幕宽度
    private var screenWidth = 0
    //屏幕高度
    private var screenHeight = 0

接着是两个方法 直接封装起来了

    //获取屏幕截图
    private fun captureScreen(activity: Activity): Bitmap? {
        val decorView = activity.window.decorView
        //获取状态栏高度
        val frame = Rect()
        decorView.getWindowVisibleDisplayFrame(frame)
        statusBarHeight = frame.top
        //将截图保存为Bitmap
        val bitmap = Bitmap.createBitmap(decorView.width, decorView.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas()
        canvas.setBitmap(bitmap)
        decorView.draw(canvas)
        screenWidth = bitmap.width
        screenHeight = bitmap.height
        //将截图保存为Bitmap 保存截图时去除顶部状态栏
        var mBitMap = Bitmap.createBitmap(bitmap, 0, statusBarHeight, screenWidth, screenHeight - statusBarHeight)
        //此处将原图缩小为1/4(图片会变模糊) 以提升模糊的速度 适当配合模糊半径达到效果
        mBitMap = Bitmap.createScaledBitmap(mBitMap, screenWidth / 4, screenHeight / 4, false)
        return mBitMap
    }
//图片和模糊半径
    private fun blur(bitmap: Bitmap,radius:Float): Bitmap? {
        //使用RenderScript对图片进行高斯模糊处理
        val output = Bitmap.createBitmap(bitmap) // 创建输出图片
        val rs: RenderScript = RenderScript.create(this) // 构建一个RenderScript对象
        val gaussianBlue: ScriptIntrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) //
        // 创建高斯模糊脚本
        val allIn: Allocation = Allocation.createFromBitmap(rs, bitmap) // 开辟输入内存
        val allOut: Allocation = Allocation.createFromBitmap(rs, output) // 开辟输出内存
        gaussianBlue.setRadius(radius) // 设置模糊半径,范围0f<radius<=25f
        gaussianBlue.setInput(allIn) // 设置输入内存
        gaussianBlue.forEach(allOut) // 模糊编码,并将内存填入输出内存
        allOut.copyTo(output) // 将输出内存编码为Bitmap,图片大小必须注意
        rs.destroy()
        return output
    }

最后就是调用方法了

        //调用获取屏幕截图
        var bp: Bitmap? = captureScreen(this)
        //对屏幕截图进行模糊化处理radius为模糊半径 值越大越模糊
        bp = blur(bp!!,20f) //对屏幕截图模糊处理
        //恢复模糊后的图片为屏幕大小 此处减去了状态栏高度
        bp = Bitmap.createScaledBitmap(bp!!, screenWidth, screenHeight-statusBarHeight, false)
        //将模糊后的图片设置到想要的位置做背景
        

下面就是小窍门和小细节了
1.小窍门
其实已经写在备注里了就是将截图保存为Bitmap后将其缩小为原来的1/4或者其他数值( 太小会变成马赛克算是另外一种效果吧)这样可以加快高斯模糊的速度
2.小细节
因为截图是全屏的所以当你局部需要使用的时候需要给ImageView设置scaleType属性比如我这边是从左侧弹出抽屉要将其值设置为matrix,具体scaleType的属性效果可以看我另外一篇文章
Android ImageView的scaleType属性介绍

此外笔者很多思路和灵感(拷贝代码)来自此篇文章
安卓AlertDialog对话框背景模糊的简单实现

感谢观看
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容