(文章的意義在于分享技術(shù), 所以這里會(huì)重點(diǎn)講下原理和實(shí)現(xiàn)思路, 希望大家看完可以理解實(shí)現(xiàn)思路, 這樣如果項(xiàng)目有需求,可以隨時(shí)增刪功能, 如果出了bug也更易修改)
在某個(gè)版本更新時(shí), UI要求彈出選項(xiàng)框類似于下面的效果:

對(duì), 就是qq這種彈出方式, 而UI給的效果圖實(shí)際是這樣的:

恩, 我們UI的審美認(rèn)為下面加一層模糊效果會(huì)比較好看, 我看了之后認(rèn)為沒什么問題, 就是多了一層模糊效果而已, 但做到后面才發(fā)現(xiàn)有的很大的坑在等我.
首先我做出來的自定義view是希望全局只要調(diào)一個(gè)方法就可以用的, 就像popupwindow那樣, 所以我的思路是初始化整個(gè)布局, 然后以Toast的方式添加到屏幕最前端.
所以第一步: 初始化整個(gè)彈窗布局


第二步: 這里比較重要了, 當(dāng)點(diǎn)擊button, 彈出選項(xiàng)框的時(shí)候, 具體做哪些事情

到這里我們所有操作就都完成了 大家是不是感覺很簡(jiǎn)單, 嘿嘿嘿, 最難的坑其實(shí)是模糊圖片那里, 因?yàn)槲覀兪钱?dāng)用戶點(diǎn)擊彈出按鈕的時(shí)候動(dòng)態(tài)模糊的, 所以效率就很重要, 下面是我對(duì)activity視圖bitmap的處理:

當(dāng)用戶點(diǎn)下按鈕時(shí),我們需要立刻就將模糊后的圖片顯示出來, 下面是我的模糊圖片代碼:

android里面的高斯模糊我大概總結(jié)了一下 基本有三種, 優(yōu)缺點(diǎn)都有, 我用的是系統(tǒng)推薦的, 速度比較快,而且也簡(jiǎn)單, 但只能支持android版本17以上, 但現(xiàn)在手機(jī)用android4.2以下的估計(jì)也很少了.
第二種就是利用glide自定義類繼承BitmapTransformation來實(shí)現(xiàn)在加載圖片時(shí)模糊圖片,但和第一種差不多,也要android版本17以上才能用
第三種就是用java層的代碼, 手動(dòng)算出像素值, 因?yàn)閳D片處理的代碼邏輯都是用java實(shí)現(xiàn)的, 所以效率極差, 不推薦.
最后在說一下那個(gè)彈出蠕動(dòng)的動(dòng)畫, 很簡(jiǎn)單20行代碼就ok了, 我是用屬性動(dòng)畫寫的, 讓彈窗view的寬和高的規(guī)模從0到1, 然后在從1到0.95, 這樣就造成了一個(gè)彈出的動(dòng)態(tài)效果, 很easy吧

大功告成出來的效果就是這樣的啦

源碼下載,求點(diǎn)star?(ps: 如果我分享的技術(shù)對(duì)您有所幫助, 或者解決了您的一些問題, 請(qǐng)點(diǎn)一下我喜歡和github上的star哦!!! github主頁(yè)?我會(huì)經(jīng)常在上面分享我工作中遇到的問題和酷炫的特效實(shí)現(xiàn)的, 關(guān)注一下啦)