Android開源:HintPopupWindow - 比QQ更炫酷的'選項彈窗'動畫
文章的意義在于分享技術, 所以這里會重點講下原理和實現思路, 希望大家看完可以理解實現思路, 這樣如果項目有需求,可以隨時增刪功能, 如果出了bug也更易修改
在某個版本更新時, UI要求彈出選項框類似于下面的效果:
對, 就是qq這種彈出方式, 而UI給的效果圖實際是這樣的:
恩, 我們UI的審美認為下面加一層模糊效果會比較好看, 我看了之后認為沒什么問題, 就是多了一層模糊效果而已, 但做到后面才發現有的很大的坑在等我.
首先我做出來的自定義view是希望全局只要調一個方法就可以用的, 就像popupwindow那樣, 所以我的思路是初始化整個布局, 然后以Toast的方式添加到屏幕最前端.
所以第一步: 初始化整個彈窗布局
第二步: 這里比較重要了, 當點擊button, 彈出選項框的時候, 具體做哪些事情
到這里我們所有操作就都完成了 大家是不是感覺很簡單, 嘿嘿嘿, 最難的坑其實是模糊圖片那里, 因為我們是當用戶點擊彈出按鈕的時候動態模糊的, 所以效率就很重要, 下面是我對activity視圖bitmap的處理:
當用戶點下按鈕時,我們需要立刻就將模糊后的圖片顯示出來, 下面是我的模糊圖片代碼:
android里面的高斯模糊我大概總結了一下 基本有三種, 優缺點都有, 我用的是系統推薦的, 速度比較快,而且也簡單, 但只能支持android版本17以上, 但現在手機用android4.2以下的估計也很少了.
第二種就是利用glide自定義類繼承BitmapTransformation來實現在加載圖片時模糊圖片,但和第一種差不多,也要android版本17以上才能用
第三種就是用java層的代碼, 手動算出像素值, 因為圖片處理的代碼邏輯都是用java實現的, 所以效率極差, 不推薦.
最后在說一下那個彈出蠕動的動畫, 很簡單20行代碼就ok了, 我是用屬性動畫寫的, 讓彈窗view的寬和高的規模從0到1, 然后在從1到0.95, 這樣就造成了一個彈出的動態效果, 很easy吧
大功告成出來的效果就是這樣的啦
源碼下載,求點star https://github.com/Zhaoss/HintPopupWindow (ps: 如果我分享的技術對您有所幫助, 或者解決了您的一些問題, 請點一下我喜歡和github上的 star 哦!!! github主頁 ( https://github.com/Zhaoss )我會經常在上面分享我工作中遇到的問題和酷炫的特效實現的, 關注一下啦)