一个实现带灰色蒙版从底部弹出的PopupWindow基类封装(解决蒙版覆盖虚拟按键问题)

主要解决的问题:

1.项目中过多冗余的PopupWindow初始化

2.每个页面单独对灰色蒙版进行处理,并且效果并不是特别好。

3.使用WindowManager设置透明度,PopupWindow由于有延时动画,快速点击的时候,会出现必定异常情况。

4.使用WindowManager的透明度设置灰色蒙版,存在当底部展示虚拟按键的时候,灰色蒙版会覆盖到虚拟按键上

解决思路:

1.在基类中初始化一个PopupWindow,并对其进行一些常规的设置(一般大部分页面的设置都差不多,取最常用的配置,把有可能变化的配置可以作为设置项开放出来)

2.在基类中实现WindowManager控制透明度,以展示灰色蒙版效果。

3.解决快速点击问题。采用PopupWindow全屏展示,灰色遮罩层放一个透明的view,用它的点击事件来处理PopupWindow消失事件。

4.解决虚拟按键问题,尝试各种方法无效后。采用PopupWindow全屏展示,会填充的底部虚拟按键,然后通过一个占位view,设置为虚拟按键的高度来撑起PopupWindow。从而解决虚拟按键也会变灰的问题。

思路都讲了,还写不出来的可以下载看看。

https://download.csdn.net/download/u011835956/13622616

主要还是解决灰色蒙版会覆盖到虚拟按键上导致虚拟按键颜色发生变化的问题。

如果大家有更好的解决思路也请告知我呀~

补充一个弹出动画优化:

开始使用网上最常见的方案实现底部弹出由下至上弹出的动画效果,代码如下:

<setxmlns:android=”http://schemas.android.com/apk/res/android”>

 <translate

  android:duration=”200″

  android:fromYDelta=”0″

  android:toYDelta=”50%p”/>

 <alpha

  android:duration=”200″

  android:fromAlpha=”1.0″

  android:toAlpha=”0.0″/>

</set>

大致如上,使用translate动画,但是做出来的动画效果超级生硬。发现别人家的app动画效果都超级流畅,研究后换为scale缩放动画实现,动画效果就超级美了。原理是x轴不变,对y轴做一个缩放动画的效果:

popup_enter.xml:

<?xml version=”1.0″ encoding=”utf-8″?>

<set xmlns:android=”http://schemas.android.com/apk/res/android”

   android:duration=”200″>

       android:fromXScale=”1.0″

       android:fromYScale=”0.0″

       android:interpolator=”@android:anim/accelerate_decelerate_interpolator”

       android:pivotX=”0%”

       android:pivotY=”100%”

       android:toXScale=”1.0″

       android:toYScale=”1.0″ />

</set>

popup_exit.xml:

<set xmlns:android=”http://schemas.android.com/apk/res/android”

   android:duration=”200″>

       android:fromXScale=”1.0″

       android:fromYScale=”1.0″

       android:interpolator=”@android:anim/accelerate_decelerate_interpolator”

       android:pivotX=”0%”

       android:pivotY=”100%”

       android:toXScale=”1.0″

       android:toYScale=”0.0″/>

</set>

<style name=”popupAnimation”>

    <item name=”android:windowEnterAnimation”>@anim/popup_enter

    <item name=”android:windowExitAnimation”>@anim/popup_exit

</style>

mPopupWindow.setAnimationStyle(R.style.popupAnimation);//添加动画,默认底部弹出动画

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共1条

请登录后发表评论