一个实现带灰色蒙版从底部弹出的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

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

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

 

 

补充一个动画优化:

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

<set xmlns: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">
    <scale
        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">
    <scale
        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>
    <item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>



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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值