package com.mingle.sweetpick;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import com.mingle.adapter.ViewpagerAdapter;
import com.mingle.entity.MenuEntity;
import com.mingle.viewhandler.MenuListViewHandler;
import com.mingle.sweetsheet.R;
import com.mingle.widget.FreeGrowUpParentRelativeLayout;
import com.mingle.widget.IndicatorView;
import com.mingle.widget.SweetView;
import java.util.ArrayList;
import java.util.List;
/**
* @author zzz40500
* @version 1.0
* @date 2015/8/5.
* @github: https://github.com/zzz40500
*
*/
public class ViewPagerDelegate extends Delegate {
private ArrayList<MenuListViewHandler> mMenuListViewHandlers;
private IndicatorView mIndicatorView;
private ViewPager mViewPager;
private SweetView mSweetView;
private MenuListViewHandler mMenuListViewHandler;
private FreeGrowUpParentRelativeLayout mFreeGrowUpParentRelativeLayout;
private SweetSheet.OnMenuItemClickListener mOnMenuItemClickListener;
private List<MenuEntity> mMenuEntities;
private int mNumColumns=3;
private int mContentViewHeight;
public ViewPagerDelegate() {
}
public ViewPagerDelegate(int numColumns ) {
mNumColumns=numColumns;
}
public ViewPagerDelegate(int numColumns ,int contentViewHeight) {
mNumColumns=numColumns;
mContentViewHeight=contentViewHeight;
}
@Override
protected View createView() {
View rootView = LayoutInflater.from(mParentVG.getContext()).inflate(R.layout.layout_vp_sweet, null, false);
mSweetView = (SweetView) rootView.findViewById(R.id.sv);
mFreeGrowUpParentRelativeLayout = (FreeGrowUpParentRelativeLayout) rootView.findViewById(R.id.freeGrowUpParentF);
mIndicatorView = (IndicatorView) rootView.findViewById(R.id.indicatorView);
mIndicatorView.alphaDismiss(false);
mSweetView.setAnimationListener(new AnimationImp());
mViewPager = (ViewPager) rootView.findViewById(R.id.vp);
if(mContentViewHeight > 0){
mFreeGrowUpParentRelativeLayout.setContentHeight(mContentViewHeight);
}
return rootView;
}
@Override
protected void dismiss() {
super.dismiss();
}
public ViewPagerDelegate setContentHeight(int height){
if(height >0 && mFreeGrowUpParentRelativeLayout != null){
mFreeGrowUpParentRelativeLayout.setContentHeight(height);
}else{
mContentViewHeight=height;
}
return this;
}
protected void setMenuList( List<MenuEntity> menuEntities) {
mMenuEntities=menuEntities;
mMenuListViewHandlers = new ArrayList<>();
int fragmentCount = menuEntities.size() / (mNumColumns*2);
if (menuEntities.size() % (mNumColumns*2) != 0) {
fragmentCount += 1;
}
for (int i = 0; i < fragmentCount; i++) {
int lastIndex = Math.min((i + 1) * (mNumColumns*2), menuEntities.size());
MenuListViewHandler menuListViewHandler = MenuListViewHandler.getInstant
(i,mNumColumns, menuEntities.subList(i*(mNumColumns*2),lastIndex));
menuListViewHandler.setOnMenuItemClickListener(new OnFragmentInteractionListenerImp());
mMenuListViewHandlers.add(menuListViewHandler);
}
mViewPager.setAdapter(new ViewpagerAdapter(mMenuListViewHandlers));
mIndicatorView.setViewPager(mViewPager);
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
selectPosition(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
selectPosition(0);
}
protected void show() {
super.show();
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
if (mRootView.getParent() != null) {
mParentVG.removeView(mRootView);
}
mParentVG.addView(mRootView, lp);
mSweetView.show();
}
@Override
protected void setOnMenuItemClickListener(SweetSheet.OnMenuItemClickListener onItemClickListener) {
mOnMenuItemClickListener = onItemClickListener;
}
private void selectPosition(int position) {
mMenuListViewHandler = (MenuListViewHandler) mMenuListViewHandlers.get(position);
}
class OnFragmentInteractionListenerImp implements MenuListViewHandler.OnFragmentInteractionListener{
@Override
public void onFragmentInteraction(int index) {
if (mOnMenuItemClickListener != null) {
mMenuEntities.get(index);
if (mOnMenuItemClickListener.onItemClick(index,mMenuEntities.get(index))) {
delayedDismiss();
}
}
}
}
class AnimationImp implements SweetView.AnimationListener {
@Override
public void onStart() {
mStatus = SweetSheet.Status.SHOWING;
mIndicatorView.setVisibility(View.INVISIBLE);
if (mMenuListViewHandler != null) {
mMenuListViewHandler.animationOnStart();
}
}
@Override
public void onEnd() {
if( mStatus==SweetSheet.Status.SHOWING) {
mIndicatorView.alphaShow(true);
mIndicatorView.setVisibility(View.VISIBLE);
mIndicatorView.circularReveal(
mIndicatorView.getWidth() / 2,
mIndicatorView.getHeight() / 2,
0,
mIndicatorView.getWidth(), 2000, new DecelerateInterpolator());
mStatus = SweetSheet.Status.SHOW;
}
}
@Override
public void onContentShow() {
if (mMenuListViewHandler != null) {
mMenuListViewHandler.notifyAnimation();
}
}
}
}