Android开源:HintPopupWindow - 比QQ更炫酷的'选项弹窗'动画

jope3014 8年前
   <p>文章的意义在于分享技术, 所以这里会重点讲下原理和实现思路, 希望大家看完可以理解实现思路, 这样如果项目有需求,可以随时增删功能, 如果出了bug也更易修改</p>    <p>在某个版本更新时, UI要求弹出选项框类似于下面的效果:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/764d9f874ad8107d43291da6833226d6.gif"></p>    <p>对, 就是qq这种弹出方式, 而UI给的效果图实际是这样的:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/109d2904f97618f9fa25cddff321aa01.jpg"></p>    <p>恩, 我们UI的审美认为下面加一层模糊效果会比较好看, 我看了之后认为没什么问题, 就是多了一层模糊效果而已, 但做到后面才发现有的很大的坑在等我.</p>    <p>首先我做出来的自定义view是希望全局只要调一个方法就可以用的, 就像popupwindow那样, 所以我的思路是初始化整个布局, 然后以Toast的方式添加到屏幕最前端.</p>    <p>所以第一步: 初始化整个弹窗布局</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/9c260cfe6223a0d70e5f9e9fbb2a2609.jpg"></p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/db4fb43cea62340185502e6de458c4a1.jpg"></p>    <p>第二步: 这里比较重要了, 当点击button, 弹出选项框的时候, 具体做哪些事情</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/0fe36cc6a795bf9bd34984402585e9ab.jpg"></p>    <p>到这里我们所有操作就都完成了 大家是不是感觉很简单, 嘿嘿嘿, 最难的坑其实是模糊图片那里, 因为我们是当用户点击弹出按钮的时候动态模糊的, 所以效率就很重要, 下面是我对activity视图bitmap的处理:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/00bda7f354055be363d4fd7763c91bfe.jpg"></p>    <p>当用户点下按钮时,我们需要立刻就将模糊后的图片显示出来, 下面是我的模糊图片代码:</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/68c5283a18a1cbfc751f330a3fdcaba1.jpg"></p>    <p>android里面的高斯模糊我大概总结了一下 基本有三种, 优缺点都有, 我用的是系统推荐的, 速度比较快,而且也简单, 但只能支持android版本17以上, 但现在手机用android4.2以下的估计也很少了.</p>    <p>第二种就是利用glide自定义类继承BitmapTransformation来实现在加载图片时模糊图片,但和第一种差不多,也要android版本17以上才能用</p>    <p>第三种就是用java层的代码, 手动算出像素值, 因为图片处理的代码逻辑都是用java实现的, 所以效率极差, 不推荐.</p>    <p>最后在说一下那个弹出蠕动的动画, 很简单20行代码就ok了, 我是用属性动画写的, 让弹窗view的宽和高的规模从0到1, 然后在从1到0.95, 这样就造成了一个弹出的动态效果, 很easy吧</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/019a6dc8d165a66c9bc5dad5d56abefc.jpg"></p>    <p>大功告成出来的效果就是这样的啦</p>    <p style="text-align:center"><img src="https://simg.open-open.com/show/dd9fd925b283b8fc5a5525cf48d3de5f.gif"></p>    <p>源码下载,求点star  https://github.com/Zhaoss/HintPopupWindow (ps: 如果我分享的技术对您有所帮助, 或者解决了您的一些问题, 请点一下我喜欢和github上的 star 哦!!!  github主页  ( https://github.com/Zhaoss )我会经常在上面分享我工作中遇到的问题和酷炫的特效实现的, 关注一下啦)</p>    <p> </p>    <p> </p>