今天又用到了PopWindow,所以决定对Popwindow做个总结,首先看创建PopWindow相关代码
class CityPopupWindow extends PopupWindow {
public CityPopupWindow(View view, int width, int height) {
super(view, width, height);
}
@Override
public void dismiss() {
//popwindow背景消失动画
view_bg.startAnimation(AnimationUtils.loadAnimation(context,
R.anim.bg_out_anim));
view_bg.setVisibility(View.GONE);
super.dismiss();
}
}
其中view_bg是整体背景,就是在Activity的layout中加了一个遮罩层,代码如下
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
android:orientation="vertical">
<include
android:id="@+id/action_bar"
layout="@layout/include_back_commit"
android:layout_width="match_parent"
android:layout_height="@dimen/view_height" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/layout_weekview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
></LinearLayout>
<TextView
android:id="@+id/tv_tip"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="加载中"
android:textColor="@color/darkgray"
android:visibility="visible" />
</FrameLayout>
</LinearLayout>
<View
android:id="@+id/sceduleview_bg"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone"
android:background="@color/translucent_over_background"/>
</FrameLayout>
下面是初始化PopWindow的代码
public void initPopWindowView(AppointmentExt appointment) {
// // 获取自定义布局文件
View dialogView = getLayoutInflater().inflate(R.layout.popwindow_scedule,
null, false);
cityPopwindow = new CityPopupWindow(dialogView, RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
SimpleDraweeView headicon = (SimpleDraweeView) dialogView.findViewById(R.id.sdv_headicon);
TextView title = (TextView) dialogView.findViewById(R.id.tv_title);
TextView content = (TextView) dialogView.findViewById(R.id.tv_content);
TextView status = (TextView) dialogView.findViewById(R.id.tv_status);
User user = appointment.getUser();;
ImageUtils.setSimpleDrawView(headicon, user.getAvatar());
content.setText(StringUtils.subStrSensitive(appointment.getTopic().getTitle(), 28));
status.setText(TransUtils.getAppointStatus( appointment.getAppoint().getStatus()));
// 设置Pop响应外部区域焦点
cityPopwindow.setOutsideTouchable(true);
cityPopwindow.setBackgroundDrawable(new BitmapDrawable());
// 设置Pop入场和出场动画效果
cityPopwindow.setAnimationStyle(R.style.pop_anim);
// 设置Pop响应内部区域焦点
cityPopwindow.setFocusable(true);
}
然后是显示Popwindow
initPopWindowView();
view_bg.setVisibility(View.VISIBLE);
view_bg.startAnimation(AnimationUtils.loadAnimation(context,
R.anim.bg_in_anim));
cityPopwindow.showAtLocation(weekView, Gravity.NO_GRAVITY, (int) eventRect.left, (int) eventRect.centerY());
下面是相关的style和动画
pop出场入场style
<style name="pop_anim">
<item name="android:windowEnterAnimation">@anim/pop_in_anim</item>
<item name="android:windowExitAnimation">@anim/pop_out_anim</item>
</style>
pop_in_anim
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="0%"
android:fromYScale="0%"
android:toXScale="100%"
android:toYScale="100%"
android:duration="300" />
</set>
pop_out_anim
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXScale="100%"
android:fromYScale="100%"
android:toXScale="0%"
android:toYScale="0%"
android:duration="300" />
</set>
view_bg显示动画 bg_in_anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:startOffset="200"
android:fillAfter="true"
android:duration="300"/>
view_bg消失动画 bg_out_anim
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:fillAfter="true"
android:duration="300"/>