欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

貌似淘宝下拉PopWindow筛选【动画、列表、位置】

程序员文章站 2022-05-31 14:37:44
...

1.写在前面

最近做了个pop需求,以前写过pop,比如 点击照片时,从底部弹出一个pop,里面可能包含 拍照 相册 取消类似这种,相比以前的pop,现在的需求不一样。
1.位置。并不是从底部移动上去 然后移动下去;
2.列表数据。里面的数据也不是定死的,从接口获取,可能只有一条,可能有N条,不同的用户不一样。
3.动画。因为数据的原因,这里并不能使用translate,比如加入某一用户的数据很多,如果布局wrap_content就有可能将屏幕布满,所以这里需要设置一个pop高度,这样子使用translate体验非常不好,有兴趣可以试一试。
下面这是项目效果
貌似淘宝下拉PopWindow筛选【动画、列表、位置】

下面这是demo效果
貌似淘宝下拉PopWindow筛选【动画、列表、位置】

2.代码

因为pop使用的是在太多了,代码都非常熟悉了,这里的代码主要有几个地方不一样。
初始化时为pop设置动画

     popPower.setAnimationStyle(R.style.popup_device_choose);

     <style name="popup_device_choose">
        <item name="android:windowEnterAnimation">@anim/pop_scale_small</item>
        <item name="android:windowExitAnimation">@anim/pop_scale_large</item>
     </style>

    //这里只是其中一个动画
     <scale
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="300"
        android:fromXScale="1"
        android:fromYScale="0"
        android:pivotX="0%"
        android:pivotY="0%"
        android:toXScale="1"
        android:toYScale="1" >
    </scale>

特别注意这里的动画使用的scale,真没想到scale还能这样用,X轴方向不缩放,然后Y轴上进行缩放,真能达到类似translate效果,特别感谢一好哥们的提示(开始使用translate效果非常不好)

获取要显示pop View,比如这里的红色View,pop要显示在它下面,获取到后 设置

    //pop弹出锚点
        RelativeLayout rlDeviceListChoose = (RelativeLayout)this.findViewById(R.id.rl_device_list_choose);
        popPower.showAsDropDown(rlDeviceListChoose);

3.源码

如果帮到你Star下,thx