Android Activity背景截圖并模糊處理

話不多說先上效果此處我是以DrawerLayout為例 當(dāng)抽屜打開的時候?qū)⒊閷细采w的位置變?yōu)槊AЧ?/p>

將虛化后的背景設(shè)置到Drawer上

實現(xiàn)思路其實很簡單分為三步
1.將整個屏幕除去狀態(tài)欄截屏存為Bitmap
2.對這個Bitmap進(jìn)行高斯模糊處理
3.將處理后的圖片設(shè)置為DrawerLayout的背景或者是任何你想實現(xiàn)效果的ImageView上


中間有一些小竅門和小細(xì)節(jié)聽我娓娓到來

首先我們需要定義三個變量

    //狀態(tài)欄高度
    private var statusBarHeight=0
    //屏幕寬度
    private var screenWidth = 0
    //屏幕高度
    private var screenHeight = 0

接著是兩個方法 直接封裝起來了

    //獲取屏幕截圖
    private fun captureScreen(activity: Activity): Bitmap? {
        val decorView = activity.window.decorView
        //獲取狀態(tài)欄高度
        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 保存截圖時去除頂部狀態(tài)欄
        var mBitMap = Bitmap.createBitmap(bitmap, 0, statusBarHeight, screenWidth, screenHeight - statusBarHeight)
        //此處將原圖縮小為1/4(圖片會變模糊) 以提升模糊的速度 適當(dāng)配合模糊半徑達(dá)到效果
        mBitMap = Bitmap.createScaledBitmap(mBitMap, screenWidth / 4, screenHeight / 4, false)
        return mBitMap
    }
//圖片和模糊半徑
    private fun blur(bitmap: Bitmap,radius:Float): Bitmap? {
        //使用RenderScript對圖片進(jìn)行高斯模糊處理
        val output = Bitmap.createBitmap(bitmap) // 創(chuàng)建輸出圖片
        val rs: RenderScript = RenderScript.create(this) // 構(gòu)建一個RenderScript對象
        val gaussianBlue: ScriptIntrinsicBlur = ScriptIntrinsicBlur.create(rs, Element.U8_4(rs)) //
        // 創(chuàng)建高斯模糊腳本
        val allIn: Allocation = Allocation.createFromBitmap(rs, bitmap) // 開辟輸入內(nèi)存
        val allOut: Allocation = Allocation.createFromBitmap(rs, output) // 開辟輸出內(nèi)存
        gaussianBlue.setRadius(radius) // 設(shè)置模糊半徑,范圍0f<radius<=25f
        gaussianBlue.setInput(allIn) // 設(shè)置輸入內(nèi)存
        gaussianBlue.forEach(allOut) // 模糊編碼,并將內(nèi)存填入輸出內(nèi)存
        allOut.copyTo(output) // 將輸出內(nèi)存編碼為Bitmap审孽,圖片大小必須注意
        rs.destroy()
        return output
    }

最后就是調(diào)用方法了

        //調(diào)用獲取屏幕截圖
        var bp: Bitmap? = captureScreen(this)
        //對屏幕截圖進(jìn)行模糊化處理radius為模糊半徑 值越大越模糊
        bp = blur(bp!!,20f) //對屏幕截圖模糊處理
        //恢復(fù)模糊后的圖片為屏幕大小 此處減去了狀態(tài)欄高度
        bp = Bitmap.createScaledBitmap(bp!!, screenWidth, screenHeight-statusBarHeight, false)
        //將模糊后的圖片設(shè)置到想要的位置做背景
        

下面就是小竅門和小細(xì)節(jié)了
1.小竅門
其實已經(jīng)寫在備注里了就是將截圖保存為Bitmap后將其縮小為原來的1/4或者其他數(shù)值( 太小會變成馬賽克算是另外一種效果吧)這樣可以加快高斯模糊的速度
2.小細(xì)節(jié)
因為截圖是全屏的所以當(dāng)你局部需要使用的時候需要給ImageView設(shè)置scaleType屬性比如我這邊是從左側(cè)彈出抽屜要將其值設(shè)置為matrix,具體scaleType的屬性效果可以看我另外一篇文章
Android ImageView的scaleType屬性介紹

此外筆者很多思路和靈感(拷貝代碼)來自此篇文章
安卓AlertDialog對話框背景模糊的簡單實現(xiàn)

感謝觀看
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末县袱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佑力,更是在濱河造成了極大的恐慌式散,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件打颤,死亡現(xiàn)場離奇詭異暴拄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)编饺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門乖篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人透且,你說我怎么就攤上這事那伐。” “怎么了石蔗?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長畅形。 經(jīng)常有香客問我养距,道長,這世上最難降的妖魔是什么日熬? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任棍厌,我火速辦了婚禮,結(jié)果婚禮上竖席,老公的妹妹穿的比我還像新娘耘纱。我一直安慰自己,他們只是感情好毕荐,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布束析。 她就那樣靜靜地躺著,像睡著了一般憎亚。 火紅的嫁衣襯著肌膚如雪员寇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天第美,我揣著相機(jī)與錄音蝶锋,去河邊找鬼。 笑死什往,一個胖子當(dāng)著我的面吹牛扳缕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼躯舔,長吁一口氣:“原來是場噩夢啊……” “哼驴剔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起庸毫,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤仔拟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后飒赃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體利花,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年载佳,在試婚紗的時候發(fā)現(xiàn)自己被綠了炒事。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蔫慧,死狀恐怖挠乳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姑躲,我是刑警寧澤睡扬,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站黍析,受9級特大地震影響卖怜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阐枣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一马靠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔼两,春花似錦甩鳄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俊戳,卻和暖如春彬祖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背品抽。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工储笑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人圆恤。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓突倍,卻偏偏與公主長得像腔稀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羽历,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容