package com.flyco.dialog.widget.base; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import com.flyco.animation.BaseAnimatorSet; public abstract class BottomTopBaseDialog<T extends BottomTopBaseDialog<T>> extends BaseDialog<T> { protected View mAnimateView; private BaseAnimatorSet mWindowInAs; private BaseAnimatorSet mWindowOutAs; protected Animation mInnerShowAnim; protected Animation mInnerDismissAnim; protected long mInnerAnimDuration = 350; protected boolean mIsInnerShowAnim; protected boolean mIsInnerDismissAnim; protected int mLeft, mTop, mRight, mBottom; public BottomTopBaseDialog(Context context) { super(context); } /** set duration for inner com.flyco.animation of mAnimateView(设置animateView内置动画时长) */ public T innerAnimDuration(long innerAnimDuration) { mInnerAnimDuration = innerAnimDuration; return (T) this; } public T padding(int left, int top, int right, int bottom) { mLeft = left; mTop = top; mRight = right; mBottom = bottom; return (T) this; } /** show dialog and mAnimateView with inner show com.flyco.animation(设置dialog和animateView显示动画) */ protected void showWithAnim() { if (mInnerShowAnim != null) { mInnerShowAnim.setDuration(mInnerAnimDuration); mInnerShowAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { mIsInnerShowAnim = true; } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mIsInnerShowAnim = false; } }); mLlControlHeight.startAnimation(mInnerShowAnim); } if (mAnimateView != null) { if (getWindowInAs() != null) { mWindowInAs = getWindowInAs(); } mWindowInAs.duration(mInnerAnimDuration).playOn(mAnimateView); } } /** dimiss dialog and mAnimateView with inner dismiss com.flyco.animation(设置dialog和animateView消失动画) */ protected void dismissWithAnim() { if (mInnerDismissAnim != null) { mInnerDismissAnim.setDuration(mInnerAnimDuration); mInnerDismissAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { mIsInnerDismissAnim = true; } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { mIsInnerDismissAnim = false; superDismiss(); } }); mLlControlHeight.startAnimation(mInnerDismissAnim); } else { superDismiss(); } if (mAnimateView != null) { if (getWindowOutAs() != null) { mWindowOutAs = getWindowOutAs(); } mWindowOutAs.duration(mInnerAnimDuration).playOn(mAnimateView); } } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mIsInnerDismissAnim || mIsInnerShowAnim) { return true; } return super.dispatchTouchEvent(ev); } @Override public void onBackPressed() { if (mIsInnerDismissAnim || mIsInnerShowAnim) { return; } super.onBackPressed(); } protected abstract BaseAnimatorSet getWindowInAs(); protected abstract BaseAnimatorSet getWindowOutAs(); }