PopupWindow可以实现浮层效果,而且可以自定义显示位置,出现和退出时的动画。
首先解析一个View
LayoutInflater inflater = getLayoutInflater();
final View view = inflater.inflate(R.layout.popup, null);
创建PopupWindow
构造参数 PopupWindow(View contentView, int
width, int height, boolean focusable)。
contentView为要显示的view,width和height为宽和高,值为像素值,也可以是MATCHT_PARENT和WRAP_CONTENT。
focusable为是否可以获得焦点,这是一个很重要的参数。
这里需要为popupWindow设置一个背景,点击其他区域才能让PopupWindow消失。
PopupWindow popupWindow = new PopupWindow(view, 400, 400, true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
显示PopupWindow
showAsDropDown(View anchor)://相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff)://相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y)://相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
为PopupWindow指定动画
PopupWindow出现时的动画,popup_enter.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="0" android:toYScale="1.0"
android:pivotX="50%" android:pivotY="0%"
android:duration="100" />
</set>
PopupWindow消失时的动画,popup_exit.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="1.0"
android:fromYScale="1.0" android:toYScale="0"
android:pivotX="50%" android:pivotY="0%"
android:duration="50" />
</set>
再设定动画的style
<style name="PopupAnimation" parent="android:Animation">
<item name="android:windowEnterAnimation">@anim/popup_enter</item>
<item name="android:windowExitAnimation">@anim/popup_exit</item>
</style>
最后通过Java代码设置动画
popupWindow.setAnimationStyle(R.style.PopupAnimation);
另外在记录一个从屏幕底部弹出的动画
menu_bottombar_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="100.0%"
android:toYDelta="0.0" />
</set>
menu_bottombar_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="250"
android:fromYDelta="0.0"
android:toYDelta="100%" />
</set>
定义样式
<style name="anim_menu_bottombar">
<item name="android:windowEnterAnimation">@anim/menu_bottombar_in</item>
<item name="android:windowExitAnimation">@anim/menu_bottombar_out</item>
</style>
最后显示showAtLocation(findViewById(R.id.layout_main),
Gravity.BOTTOM, 0, 0);
PopupWindow 常用方法记录,布布扣,bubuko.com
时间: 2024-10-13 00:17:04