package razerdp.demo.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.Animation; import android.view.animation.DecelerateInterpolator; import android.view.animation.RotateAnimation; import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import razerdp.basepopup.BasePopupWindow; import razerdp.basepopup.R; import razerdp.demo.popup.SlideFromTopPopup; /** * Created by 大灯泡 on 2016/1/15. * * 从顶部向下滑动的popup */ public class SlideFromTopPopupFrag extends SimpleBaseFrag { private SlideFromTopPopup mSlideFromTopPopup; private RelativeLayout titleParent; private ImageView arrow; private RotateAnimation showArrowAnima; private RotateAnimation dismissArrowAnima; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { buildShowArrowAnima(); buildDismissArrowAnima(); return super.onCreateView(inflater, container, savedInstanceState); } private void buildShowArrowAnima() { if (showArrowAnima != null) return; showArrowAnima = new RotateAnimation(0, 180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); showArrowAnima.setDuration(450); showArrowAnima.setInterpolator(new AccelerateDecelerateInterpolator()); showArrowAnima.setFillAfter(true); } private void buildDismissArrowAnima() { if (dismissArrowAnima != null) return; dismissArrowAnima = new RotateAnimation(180f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); dismissArrowAnima.setDuration(450); dismissArrowAnima.setInterpolator(new AccelerateDecelerateInterpolator()); dismissArrowAnima.setFillAfter(true); } private void startShowArrowAnima() { if (arrow == null) return; arrow.clearAnimation(); arrow.startAnimation(showArrowAnima); } private void startDismissArrowAnima() { if (arrow == null) return; arrow.clearAnimation(); arrow.startAnimation(dismissArrowAnima); } @Override public void bindEvent() { titleParent = (RelativeLayout) findViewById(R.id.rl_title); mSlideFromTopPopup = new SlideFromTopPopup(mContext); mSlideFromTopPopup.setOnDismissListener(onDismissListener); mSlideFromTopPopup.setOnBeforeShowCallback(new BasePopupWindow.OnBeforeShowCallback() { @Override public boolean onBeforeShow(View popupRootView, View anchorView, boolean hasShowAnima) { if (anchorView!=null) { mSlideFromTopPopup.setOffsetY(anchorView.getHeight()); return true; } return false; } }); arrow = (ImageView) findViewById(R.id.iv_arrow); findViewById(R.id.ll_title).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (!mSlideFromTopPopup.isShowing()) startShowArrowAnima(); mSlideFromTopPopup.showPopupWindow(titleParent); } }); } private BasePopupWindow.OnDismissListener onDismissListener = new BasePopupWindow.OnDismissListener() { @Override public boolean onBeforeDismiss() { startDismissArrowAnima(); return super.onBeforeDismiss(); } @Override public void onDismiss() { } }; @Override public BasePopupWindow getPopup() { return null; } @Override public Button getButton() { return null; } @Override public View getFragment() { return mInflater.inflate(R.layout.frag_slide_from_top_popup, container, false); } }