package com.mingle.sweetpick; import android.support.annotation.MenuRes; import android.support.v7.widget.PopupMenu; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.RelativeLayout; import android.widget.SeekBar; import com.mingle.entity.MenuEntity; import java.util.ArrayList; import java.util.List; /** * @author zzz40500 * @version 1.0 * @date 2015/8/5. * @github: https://github.com/zzz40500 */ public class SweetSheet { public static final String Tag="SweetSheet"; public enum Type{ RecyclerView,Viewpager,Custom } private ViewGroup mParentVG; private Delegate mDelegate; private Effect mEffect=new NoneEffect(); private OnMenuItemClickListener mOnMenuItemClickListener; private boolean mIsBgClickEnable=true; public SweetSheet(RelativeLayout parentVG) { mParentVG = parentVG; } public SweetSheet(FrameLayout parentVG) { mParentVG = parentVG; } public SweetSheet(ViewGroup parentVG) { if (parentVG instanceof FrameLayout || parentVG instanceof RelativeLayout) { } else { throw new IllegalStateException("ViewGroup must FrameLayout or RelativeLayout."); } mParentVG = parentVG; } public void setDelegate(Delegate delegate){ mDelegate=delegate; mDelegate.init(mParentVG); setup(); } public Delegate getDelegate() { return mDelegate; } private void setup() { if(mOnMenuItemClickListener != null){ mDelegate.setOnMenuItemClickListener(mOnMenuItemClickListener); } if(mMenuEntities != null){ mDelegate.setMenuList(mMenuEntities); } mDelegate.setBackgroundEffect(mEffect); mDelegate.setBackgroundClickEnable(mIsBgClickEnable); } public void setBackgroundClickEnable(boolean isBgClickEnable){ if(mDelegate != null){ mDelegate.setBackgroundClickEnable(isBgClickEnable); }else{ mIsBgClickEnable=isBgClickEnable; } } public void setBackgroundEffect(Effect effect) { if(mDelegate != null) { mDelegate.setBackgroundEffect(effect); }else{ mEffect=effect; } } public void setOnMenuItemClickListener(OnMenuItemClickListener onItemClickListener) { if(mDelegate != null) { mDelegate.setOnMenuItemClickListener(onItemClickListener); }else{ mOnMenuItemClickListener=onItemClickListener; } } public void show() { if(mDelegate != null) { mDelegate.show(); }else{ Log.e(Tag,"you must setDelegate before"); } } public void dismiss() { if(mDelegate != null) { mDelegate.dismiss(); }else{ Log.e(Tag,"you must setDelegate before"); } } public void toggle() { if(mDelegate != null) { mDelegate.toggle(); }else{ Log.e(Tag,"you must setDelegate before"); } } public boolean isShow() { if(mDelegate == null) { return false; } if (mDelegate.getStatus() == Status.SHOW || mDelegate.getStatus() == Status.SHOWING) { return true; } return false; } private List<MenuEntity> mMenuEntities; public void setMenuList(List<MenuEntity> menuEntities) { if(mDelegate != null) { mDelegate.setMenuList(menuEntities); }else{ mMenuEntities=menuEntities; } } public void setMenuList(@MenuRes int menuRes) { Menu menu = new PopupMenu(mParentVG.getContext(), null).getMenu(); new MenuInflater(mParentVG.getContext()).inflate(menuRes, menu); List<MenuEntity> menuEntities = getMenuEntityFormMenuRes(menu); if(mDelegate != null) { mDelegate.setMenuList(menuEntities); }else{ mMenuEntities=menuEntities; } } /** * 当前只处理一级的菜单 * * @param menu * @return */ private List<MenuEntity> getMenuEntityFormMenuRes(Menu menu) { List<MenuEntity> list = new ArrayList<>(); for (int i = 0; i < menu.size(); i++) { MenuItem item = menu.getItem(i); if (item.isVisible()) { MenuEntity itemEntity = new MenuEntity(); itemEntity.title = item.getTitle().toString(); itemEntity.icon = item.getIcon(); list.add(itemEntity); } } return list; } protected enum Status { SHOW, SHOWING, DISMISS, DISMISSING } public interface OnMenuItemClickListener { boolean onItemClick(int position, MenuEntity menuEntity); } }