请给我一个安卓PopupWindow的底部滑入和滑出的动画并给出使用样例
时间: 2024-05-06 17:15:57 浏览: 12
以下是一个底部滑入和滑出动画的 PopupWindow 样例:
```java
public class BottomSlidePopupWindow extends PopupWindow {
private View mContentView;
private View mPopupView;
private int mAnimationStyle;
public BottomSlidePopupWindow(Context context, View contentView) {
super(context);
this.mContentView = contentView;
setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
setFocusable(true);
setOutsideTouchable(true);
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
setAnimationStyle(R.style.BottomSlideAnimation);
setContentView(mContentView);
}
public void setPopupView(View popupView) {
this.mPopupView = popupView;
setContentView(mPopupView);
}
public void setAnimationStyle(int animationStyle) {
mAnimationStyle = animationStyle;
}
public void show(View anchorView) {
showAtLocation(anchorView, Gravity.BOTTOM, 0, 0);
if (mPopupView != null) {
mPopupView.startAnimation(getAnimation(true));
}
}
public void dismiss() {
if (mPopupView != null) {
mPopupView.startAnimation(getAnimation(false));
}
mContentView.postDelayed(new Runnable() {
@Override
public void run() {
BottomSlidePopupWindow.super.dismiss();
}
}, 300);
}
private Animation getAnimation(boolean isShow) {
if (mAnimationStyle == 0) {
return getDefaultAnimation(isShow);
} else {
return AnimationUtils.loadAnimation(mContentView.getContext(), mAnimationStyle);
}
}
private Animation getDefaultAnimation(boolean isShow) {
Animation animation;
if (isShow) {
animation = new TranslateAnimation(0, 0, mContentView.getHeight(), 0);
} else {
animation = new TranslateAnimation(0, 0, 0, mContentView.getHeight());
}
animation.setInterpolator(new AccelerateDecelerateInterpolator());
animation.setDuration(300);
return animation;
}
}
```
使用方法:
```java
View contentView = LayoutInflater.from(context).inflate(R.layout.popup_content, null);
View popupView = LayoutInflater.from(context).inflate(R.layout.popup_view, null);
BottomSlidePopupWindow popupWindow = new BottomSlidePopupWindow(context, contentView);
popupWindow.setPopupView(popupView);
popupWindow.show(anchorView);
popupWindow.dismiss();
```
其中 `popup_content` 和 `popup_view` 是你自己定义的布局文件,`anchorView` 是 PopupWindow 的锚点视图。你可以通过 `setAnimationStyle` 方法设置不同的动画效果,也可以不设置使用默认的底部滑入和滑出动画。