先上图:
效果还是很丝滑的,这里动画主要用到了属性动画。实现逻辑很简单,动画都是在popupwindow调用showAsDropDown()
和dismiss()
时执行。这里主要是注意退出动画的实现,在dismiss()
中执行动画是无效的,需要在动画执行完毕后再执行super.dismiss();
可拓展能力强,可以结合自身需求实现不同的效果。
以下是源码:
PopupWindow :
public class TypeSelectWindow extends PopupWindow {
private Activity activity;
private BDBaseAdapter bdBaseAdapter = null;
View contentView;//弹出框的根布局,可以监听其点击事件,达到点击阴影消失弹框的效果
GridView gridView;
public TypeSelectWindow(Activity activity){
this.activity = activity;
initDatas();
initView();
}
private void initView(){
this.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
this.setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
contentView = LayoutInflater.from(activity).inflate(R.layout.join_popup_layout,null);
gridView = contentView.findViewById(R.id.gridView);
bdBaseAdapter = new BDBaseAdapter<String>(activity,listDatas,R.layout.join_select_item) {
@Override
public void convert(BDViewHolder helper, String item, int position) {
((TextView)helper.getView(R.id.text)).setText(item);
}
};
gridView.setAdapter(bdBaseAdapter);
this.setContentView(contentView);//设置布局
this.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
this.setAnimationStyle(R.style.SelectPopupWindow);
this.setOutsideTouchable(true);