popupWindow 显示位置主要有showAsDropDown()和showAtLocation(),
在控件的上方:
private void showPopUp(View parent) {
popupWindow = new PopupWindow(parent,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// 获取popwindow焦点
popupWindow.setFocusable(true);
// 点击PopupWindow区域外部消失
popupWindow.setOutsideTouchable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
// 设置popwindow出现和消失动画
popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
// 获取点击按钮的坐标
int[] location = new int[2];
v.getLocationOnScreen(location);
// 设置popwindow显示位置
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
}
使用 showAsDropDown()显示在控件的下方:
popupWindow.showAsDropDown(v);
定义popWindow进出样式,首先在Android工程中的res/anim下面新建两个xml,popshow.xml和pophide.xml如下:
1、飞入分出样式:
定义显示效果的动画文件popshow.xml :<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="120"
android:toYDelta="0"
android:duration="500" />
</set>
定义消失效果的动画文件pophide.xml :
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="120"
android:duration="500" />
</set>
在styles.xml文件中设置一个动画样式:
<style name="PopMenuAnimation">
<item name="android:windowEnterAnimation">@anim/popshow</item>
<item name="android:windowExitAnimation">@anim/pophide</item>
</style>
然后使用代码设置:
// 设置popwindow出现和消失动画
popupWindow.setAnimationStyle(R.style.PopMenuAnimation);
2、淡入淡出样式:
定义淡入样式:
<?xml version="1.0" encoding="utf-8"?>
<!-- 淡入 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="200"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
定义淡出样式:
<?xml version="1.0" encoding="utf-8"?>
<!--淡出 -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha
android:duration="200"
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
注:
参数duration用来设置动画完成需要的时间
参数fromAlpha表示动画开始时的透明度
参数toAlpha表示动画结束时的透明度