package com.xiaomi.xms.sales.widget; import android.content.Context; import android.graphics.Canvas; import android.os.Handler; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager.LayoutParams; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.PopupWindow; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.ui.ProductDetailsFragment; public class ChooseStyleWindow extends PopupWindow { private static final int BACKGROUND_COLOR = 0x99000000; private Context mContext; private View mContentView; private FrameLayout mRootPanel; public View mCoverView; private ProductDetailsFragment mFragment; public ChooseStyleWindow(Context context, View contentView, int height, ProductDetailsFragment fragment) { super(contentView, LayoutParams.MATCH_PARENT, height); mContext = context; mContentView = contentView; mFragment = fragment; mRootPanel = new RootPanel(mContext); if (mCoverView == null) { mCoverView = new LinearLayout(mRootPanel.getContext()); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); mCoverView.setBackgroundColor(BACKGROUND_COLOR); mRootPanel.addView(mCoverView, lp); } FrameLayout.LayoutParams r = new FrameLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); r.gravity = Gravity.BOTTOM; mRootPanel.addView(contentView, r); setContentView(mRootPanel); setBackgroundDrawable(context.getResources().getDrawable(android.R.color.transparent)); mCoverView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (isShowing()) { mFragment.hideStyleView(); } } }); } @Override public void dismiss() { Animation menuMoveDown = AnimationUtils.loadAnimation(mContext, R.anim.menu_exit); Animation bgDisappear = AnimationUtils.loadAnimation(mContext, R.anim.disappear); mCoverView.startAnimation(bgDisappear); mContentView.startAnimation(menuMoveDown); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { try { ChooseStyleWindow.super.dismiss(); } catch (Exception e) { } } }, 300); } @Override public void showAsDropDown(View anchor, int xoff, int yoff) { super.showAsDropDown(anchor, xoff, yoff); mContentView.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.menu_enter)); mCoverView.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.appear)); } @Override public void showAtLocation(View anchor, int gravity, int x, int y) { super.showAtLocation(anchor, gravity, x, y); mContentView.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.menu_enter)); mCoverView.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.appear)); } private class RootPanel extends FrameLayout { public RootPanel(Context context) { super(context); setClickable(true); } @Override public void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); } // Override performClick rather than set clickListener to avoid sound effect @Override public boolean performClick() { // dismiss(); return true; } } }