在res下建一个文件夹anim 分别新建上面两个xml
入场
pop_enter_anim
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200"
android:fromYDelta="100%"
android:toXDelta="0"
/>
出场
pop_exit_anim
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromYDelta="0" android:toYDelta="100%"
android:duration="200"/>
接下来就是如何实现动画
在styles中加入:
<style name="Popupwindow">
<item name="android:windowEnterAnimation">@anim/pop_enter_anim</item>
<item name="android:windowExitAnimation">@anim/pop_exit_anim</item>
</style>
在MainActivity中设置:
private void popupwindow(){
//加载布局文件
LinearLayout layout = (LinearLayout)getLayoutInflater().inflate(R.layout.popupwindow, null);
//设置宽高
popupWindow = new PopupWindow(layout, ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
//设置背景透明
addBackground();
//点击空白处时,隐藏掉pop窗口
popupWindow.setFocusable(true);
popupWindow.setBackgroundDrawable(new BitmapDrawable());
//放在指定下面
//popupWindow.showAsDropDown(控件id);
//添加弹出、弹入的动画
popupWindow.setAnimationStyle(R.style.Popupwindow);
int[] location = new int[2];
v.getLocationOnScreen(location);
//顶部就是TOP,底部Bottom
popupWindow.showAtLocation(v, Gravity.LEFT | Gravity.TOP, 0, -location[1]);
}
private void addBackground() {
// 设置背景颜色变暗
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 0.7f;//调节透明度
getWindow().setAttributes(lp);
//dismiss时恢复原样
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1f;
getWindow().setAttributes(lp);
}
});
}