content: package com.mingle.sweetpick;
  
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.view.animation.Animation;
  import android.view.animation.AnimationUtils;
  import android.view.animation.DecelerateInterpolator;
  import android.view.animation.LayoutAnimationController;
  import android.widget.RelativeLayout;
  
  import com.mingle.entity.MenuEntity;
  import com.mingle.sweetsheet.R;
  import com.mingle.widget.CRImageView;
  import com.mingle.widget.FreeGrowUpParentRelativeLayout;
  import com.mingle.widget.SweetView;
  import com.nineoldandroids.animation.ObjectAnimator;
  import com.nineoldandroids.animation.ValueAnimator;
  
  import java.util.List;
  
  /**
   * @author zzz40500
   * @version 1.0
   * @date 2015/8/9.
   * @github: https://github.com/zzz40500
   */
  public class CustomDelegate extends Delegate {
  
  
      private SweetView mSweetView;
      private RelativeLayout mContentRL;
      private CRImageView sliderIm;
  
      private FreeGrowUpParentRelativeLayout mFreeGrowUpParentRelativeLayout;
  
      private boolean mIsDragEnable;
  
      private View mContentView;
  
      private ViewGroup mAnimationView;
      private AnimationType mContentViewAnimationType;
  
      private ValueAnimator mContentViewValueAnimation;
  
      private int mContentViewHeight;
      private int sweetSheetColor;
  
  
      public CustomDelegate(boolean dragEnable, AnimationType contentViewAnimationType) {
          mIsDragEnable = dragEnable;
          mContentViewAnimationType = contentViewAnimationType;
      }
  
      public CustomDelegate(boolean dragEnable, AnimationType contentViewAnimationType, int contentViewHeight) {
          mContentViewHeight = contentViewHeight;
          mContentViewAnimationType = contentViewAnimationType;
          mIsDragEnable = dragEnable;
      }
  
      @Override
      public View createView() {
  
          View rootView = LayoutInflater.from(mParentVG.getContext())
                  .inflate(R.layout.layout_custom_sweet, null, false);
  
          mSweetView = (SweetView) rootView.findViewById(R.id.sv);
  	mSweetView.setSweetSheetColor(sweetSheetColor);
          mFreeGrowUpParentRelativeLayout = (FreeGrowUpParentRelativeLayout) rootView.findViewById(R.id.freeGrowUpParentF);
          mContentRL = (RelativeLayout) rootView.findViewById(R.id.rl);
          sliderIm = (CRImageView) rootView.findViewById(R.id.sliderIM);
          mSweetView.setAnimationListener(new AnimationImp());
  
  
          if (mContentView != null) {
              mContentRL.removeAllViews();
              mContentRL.addView(mContentView);
          }
          if (mContentViewAnimationType == AnimationType.DuangLayoutAnimation) {
              mAnimationView = null;
              if (mContentView instanceof ViewGroup) {
                  mAnimationView = (ViewGroup) mContentView;
              } else {
                  mAnimationView = mContentRL;
              }
              Animation animation = AnimationUtils.loadAnimation(mContentRL.getContext(),
                      R.anim.item_duang_show);
  
              LayoutAnimationController layoutAnimationController = new LayoutAnimationController(animation);
              layoutAnimationController.setDelay(0.1f);
              mAnimationView.setLayoutAnimation(layoutAnimationController);
          }
  
          if(mContentViewHeight > 0){
              mFreeGrowUpParentRelativeLayout.setContentHeight(mContentViewHeight);
          }
  
          return rootView;
      }
  
      protected void setMenuList(final List<MenuEntity> menuEntities) {
  
      }
  
      public  CustomDelegate setContentHeight(int height){
  
          if(height >0 && mFreeGrowUpParentRelativeLayout != null){
              mFreeGrowUpParentRelativeLayout.setContentHeight(height);
          }else{
              mContentViewHeight=height;
          }
          return this;
  
      }
  
      public RelativeLayout getContentRelativeLayout() {
          return mContentRL;
      }
  
  
      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();
      }
  
  
      public CustomDelegate setCustomView(View view) {
  
          if (mContentRL != null) {
              mContentRL.removeAllViews();
              mContentRL.addView(view);
          } else {
              mContentView = view;
          }
  
          return this;
      }
  
      public CustomDelegate setCustomView(View view, RelativeLayout.LayoutParams params) {
          if (mContentRL != null) {
              mContentRL.removeAllViews();
              mContentRL.addView(view, params);
          } else {
              mContentView = view;
              mContentView.setLayoutParams(params);
          }
  
          return this;
      }
  
  
      /**
       * 当 AnimationType = Custom 时候需要传递一个动画进来.
       */
      public CustomDelegate setCustomViewAnimation(ValueAnimator viewAnimation) {
  
          mContentViewValueAnimation = viewAnimation;
          return this;
      }
  
      class AnimationImp implements SweetView.AnimationListener {
  
          @Override
          public void onStart() {
              mFreeGrowUpParentRelativeLayout.reset();
              mStatus = SweetSheet.Status.SHOWING;
              sliderIm.setVisibility(View.INVISIBLE);
              mContentRL.setVisibility(View.GONE);
  
          }
  
          @Override
          public void onEnd() {
  
  
              if (mStatus == SweetSheet.Status.SHOWING) {
                  mStatus = SweetSheet.Status.SHOW;
  
                  if(mIsDragEnable) {
                      sliderIm.setVisibility(View.VISIBLE);
                      sliderIm.circularReveal(sliderIm.getWidth() / 2, sliderIm.getHeight() / 2, 0, sliderIm.getWidth());
                  }
              }
  
          }
  
          @Override
          public void onContentShow() {
  
              mContentRL.setVisibility(View.VISIBLE);
  
              setContentViewAnimation();
              mContentRL.scheduleLayoutAnimation();
          }
      }
  
      private void setContentViewAnimation() {
  
          switch (mContentViewAnimationType) {
              case DuangLayoutAnimation:
                  duangLayoutAnimation();
                  break;
              case DuangAnimation:
                  duangAnimation();
                  break;
              case AlphaAnimation:
                  alphaAnimation();
                  break;
              case Custom:
                  if (mContentViewValueAnimation != null) {
                      mContentViewValueAnimation.start();
                  } else {
                      throw new RuntimeException("you must invoke setCustomViewAnimation before ");
                  }
                  break;
          }
      }
  
      private void alphaAnimation() {
  
  
          ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(getContentRelativeLayout(), "alpha", 0, 1);
          objectAnimator.setDuration(1200);
          objectAnimator.setInterpolator(new DecelerateInterpolator());
          objectAnimator.start();
  
  
      }
  
      private void duangAnimation() {
  
          Animation animation = AnimationUtils.loadAnimation(mContentRL.getContext(),
                  R.anim.item_duang_show2);
          getContentRelativeLayout().startAnimation(animation);
  
      }
  
      private void duangLayoutAnimation() {
  
  
          mAnimationView.setLayoutAnimationListener(new Animation.AnimationListener() {
              @Override
              public void onAnimationStart(Animation animation) {
                  mFreeGrowUpParentRelativeLayout.setClipChildren(false);
              }
  
              @Override
              public void onAnimationEnd(Animation animation) {
                  mFreeGrowUpParentRelativeLayout.setClipChildren(true);
              }
  
              @Override
              public void onAnimationRepeat(Animation animation) {
  
              }
          });
  
          mAnimationView.scheduleLayoutAnimation();
  
      }
  
  
      /**
       * 定义了中间视图的动画类型,为四种
       */
      public enum AnimationType {
          //这个用 LayoutAnimation 方式实现的
          DuangLayoutAnimation,
          //这个是对这个 View 进行动画
          DuangAnimation,
          //这个是对这个 View 进行动画,它是简单额alpha 值变化
          AlphaAnimation,
          //自定义的动画,需要调用
          Custom
      }
  
      public void setSweetSheetColor(int sweetSheetColor) {
          this.sweetSheetColor = sweetSheetColor;
      }
  }
  