Android開源:HintPopupWindow - 比QQ更炫酷的'選項彈窗'動畫

jope3014 7年前發布 | 12K 次閱讀 安卓開發 Android開發 移動開發

文章的意義在于分享技術, 所以這里會重點講下原理和實現思路, 希望大家看完可以理解實現思路, 這樣如果項目有需求,可以隨時增刪功能, 如果出了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 )我會經常在上面分享我工作中遇到的問題和酷炫的特效實現的, 關注一下啦)

 

 

 本文由用戶 jope3014 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!