package razerdp.demo.popup; import android.animation.Animator; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.app.Activity; import android.content.Context; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import razerdp.basepopup.BasePopupWindow; import razerdp.basepopup.R; /** * Created by 大灯泡 on 2016/1/20. * 包含着listview的popup,使用builder模式,事件与tag进行绑定 */ public class ListPopup extends BasePopupWindow { private ListView mListView; private OnListPopupItemClickListener mOnListPopupItemClickListener; private ListPopup(Activity context) { super(context); } private ListPopup(Activity context,Builder builder){ this(context); mListView= (ListView) findViewById(R.id.popup_list); setAdapter(context,builder); } public static class Builder{ private List<Object> mItemEventList=new ArrayList<>(); private Activity mContext; public Builder(Activity context) { mContext = context; } public Builder addItem(String itemTx){ mItemEventList.add(itemTx); return this; } public Builder addItem(int clickTag,String itemTx){ mItemEventList.add(new clickItemEvent(clickTag,itemTx)); return this; } public List<Object> getItemEventList() { return mItemEventList; } public ListPopup build(){ return new ListPopup(mContext,this); } } public static class clickItemEvent{ private int clickTag; private String itemTx; public clickItemEvent(int clickTag, String itemTx) { this.clickTag = clickTag; this.itemTx = itemTx; } public int getClickTag() { return clickTag; } public void setClickTag(int clickTag) { this.clickTag = clickTag; } public String getItemTx() { return itemTx; } public void setItemTx(String itemTx) { this.itemTx = itemTx; } } //=============================================================adapter class ListPopupAdapter extends BaseAdapter{ private LayoutInflater mInflater; private Context mContext; private List<Object> mItemList; public ListPopupAdapter(Context context, @NonNull List<Object> itemList) { mContext = context; mItemList = itemList; mInflater=LayoutInflater.from(context); } @Override public int getCount() { return mItemList.size(); } @Override public String getItem(int position) { if (mItemList.get(position) instanceof String){ return (String) mItemList.get(position); } if (mItemList.get(position) instanceof clickItemEvent){ return ((clickItemEvent) mItemList.get(position)).getItemTx(); } return ""; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder vh=null; if (convertView==null){ vh=new ViewHolder(); convertView=mInflater.inflate(R.layout.item_popup_list,parent,false); vh.mTextView= (TextView) convertView.findViewById(R.id.item_tx); convertView.setTag(vh); }else { vh= (ViewHolder) convertView.getTag(); } vh.mTextView.setText(getItem(position)); return convertView; } public List<Object> getItemList(){ return this.mItemList; } class ViewHolder{ public TextView mTextView; } } //=============================================================init private void setAdapter(Activity context, Builder builder) { if (builder.getItemEventList()==null||builder.getItemEventList().size()==0)return; final ListPopupAdapter adapter=new ListPopupAdapter(context,builder.getItemEventList()); mListView.setAdapter(adapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mOnListPopupItemClickListener!=null){ Object clickObj=adapter.getItemList().get(position); if (clickObj instanceof String){ mOnListPopupItemClickListener.onItemClick(position); } if (clickObj instanceof clickItemEvent) { int what=((clickItemEvent) clickObj).clickTag; mOnListPopupItemClickListener.onItemClick(what); } } } }); } //=============================================================super methods @Override protected Animation initShowAnimation() { return null; } @Override public Animator initShowAnimator() { AnimatorSet set = new AnimatorSet(); set.playTogether(ObjectAnimator.ofFloat(mAnimaView, "rotationX", 90f, 0f).setDuration(400), ObjectAnimator.ofFloat(mAnimaView, "translationY", 250f, 0f).setDuration(400), ObjectAnimator.ofFloat(mAnimaView, "alpha", 0f, 1f).setDuration(400 * 3 / 2)); return set; } @Override public View getClickToDismissView() { return getPopupWindowView(); } @Override public View onCreatePopupView() { return createPopupById(R.layout.popup_list); } @Override public View initAnimaView() { return findViewById(R.id.popup_anima); } @Override public Animator initExitAnimator() { AnimatorSet set = new AnimatorSet(); set.playTogether(ObjectAnimator.ofFloat(mAnimaView, "rotationX", 0f, 90f).setDuration(400), ObjectAnimator.ofFloat(mAnimaView, "translationY", 0f, 250f).setDuration(400), ObjectAnimator.ofFloat(mAnimaView, "alpha",1f, 0f).setDuration(400 * 3 / 2)); return set; } //=============================================================interface public OnListPopupItemClickListener getOnListPopupItemClickListener() { return mOnListPopupItemClickListener; } public void setOnListPopupItemClickListener(OnListPopupItemClickListener onListPopupItemClickListener) { mOnListPopupItemClickListener = onListPopupItemClickListener; } public interface OnListPopupItemClickListener{ void onItemClick(int what); } }