貌似淘宝下拉PopWindow筛选【动画、列表、位置】
程序员文章站
2022-05-31 14:37:44
...
1.写在前面
最近做了个pop需求,以前写过pop,比如 点击照片时,从底部弹出一个pop,里面可能包含 拍照 相册 取消类似这种,相比以前的pop,现在的需求不一样。
1.位置。并不是从底部移动上去 然后移动下去;
2.列表数据。里面的数据也不是定死的,从接口获取,可能只有一条,可能有N条,不同的用户不一样。
3.动画。因为数据的原因,这里并不能使用translate,比如加入某一用户的数据很多,如果布局wrap_content就有可能将屏幕布满,所以这里需要设置一个pop高度,这样子使用translate体验非常不好,有兴趣可以试一试。
下面这是项目效果
下面这是demo效果
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.源码
上一篇: Linux vi编辑器使用技巧