package com.mingle.sweetpick;
import android.graphics.Color;
import android.support.v4.app.FragmentManager;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import com.mingle.SimpleAnimationListener;
import com.mingle.entity.MenuEntity;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.ObjectAnimator;
import com.nineoldandroids.view.ViewHelper;
import java.util.List;
/**
* @author zzz40500
* @version 1.0
* @date 2015/8/5.
* @github: https://github.com/zzz40500
*/
public abstract class Delegate implements View.OnClickListener {
protected SweetSheet.Status mStatus = SweetSheet.Status.DISMISS;
protected ViewGroup mParentVG;
protected View mRootView;
private ImageView mBg;
private Effect mEffect;
private boolean mIsBgClickEnable=true;
protected SweetSheet.OnMenuItemClickListener mOnMenuItemClickListener;
protected void init(ViewGroup parentVG) {
mParentVG = parentVG;
mBg = new ImageView(parentVG.getContext());
mRootView = createView();
mBg.setOnClickListener(this);
}
/**
* 生成视图
* @return
*/
protected abstract View createView();
/**
* 设置数据源
* @param list
*/
protected abstract void setMenuList(List<MenuEntity> list);
protected void toggle() {
switch (mStatus) {
case SHOW:
case SHOWING:
dismiss();
break;
case DISMISS:
case DISMISSING:
show();
break;
default:
break;
}
}
protected void show() {
if (getStatus() != SweetSheet.Status.DISMISS) {
return;
}
mBg.setClickable(mIsBgClickEnable);
showShowdown();
}
/**
* 显示模糊背景
*/
protected void showShowdown() {
ViewHelper.setTranslationY(mRootView, 0);
mEffect.effect(mParentVG,mBg);
ViewGroup.LayoutParams lp =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
if(mBg.getParent()!= null){
mParentVG.removeView(mBg);
}
mParentVG.addView(mBg, lp);
ViewHelper.setAlpha(mBg, 0);
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mBg, "alpha", 0, 1);
objectAnimator.setDuration(400);
objectAnimator.start();
}
/**
* 隐藏模糊背景
*/
protected void dismissShowdown() {
ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(mBg, "alpha", 1, 0);
objectAnimator.setDuration(400);
objectAnimator.start();
objectAnimator.addListener(new SimpleAnimationListener() {
@Override
public void onAnimationEnd(Animator animation) {
mParentVG.removeView(mBg);
}
});
}
/**
* 消失
*/
protected void dismiss() {
if (getStatus() == SweetSheet.Status.DISMISS){
return;
}
mBg.setClickable(false);
dismissShowdown();
ObjectAnimator translationOut = ObjectAnimator.ofFloat(mRootView,
"translationY", 0, mRootView.getHeight());
translationOut.setDuration(600);
translationOut.setInterpolator(new DecelerateInterpolator());
translationOut.addListener(new SimpleAnimationListener() {
@Override
public void onAnimationStart(Animator animation) {
mStatus =
SweetSheet.Status.DISMISSING;
}
@Override
public void onAnimationEnd(Animator animation) {
mStatus = SweetSheet.Status.DISMISS;
mParentVG.removeView(mRootView);
}
});
translationOut.start();
}
protected void setBackgroundEffect(Effect effect) {
mEffect=effect;
}
protected void setOnMenuItemClickListener(SweetSheet.OnMenuItemClickListener onItemClickListener) {
mOnMenuItemClickListener = onItemClickListener;
}
/**
* 延时消失
*/
protected void delayedDismiss() {
mParentVG.postDelayed(new Runnable() {
@Override
public void run() {
dismiss();
}
}, 200);
}
protected SweetSheet.Status getStatus() {
return mStatus;
}
@Override
public void onClick(View v) {
dismiss();
}
public void setBackgroundClickEnable(boolean isBgClickEnable){
mIsBgClickEnable=isBgClickEnable;
}
}