package com.roboo.like.google.fragments; import android.graphics.Color; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.FrameLayout; import android.widget.Toast; import android.widget.FrameLayout.LayoutParams; import android.widget.LinearLayout; import android.widget.ListView; import com.roboo.like.google.MainActivity; import com.roboo.like.google.R; public class ActionSheetFragment extends BaseFragment { private static final String[] ARRAYS_STRINGS = { "离线下载" }; private static final int TRANSLATE_DURATION = 200; private static final int ALPHA_DURATION = 300; private static final int BG_VIEW_ID = 3234; private static final int CANCLE_BTN_ID = 32332; private LinearLayout mLinearContainer; private boolean mIsDownload = false; private View mPanel; /**背景View*/ private View mBgView; private ListView mListView; private Button mBtnCancle; private FrameLayout mDecorView; public static ActionSheetFragment newInstance() { ActionSheetFragment fragment = new ActionSheetFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mPanel = createView(); mDecorView = (FrameLayout) getActivity().findViewById(Window.ID_ANDROID_CONTENT); mDecorView.addView(mPanel); mBgView.setAnimation(createAlphaInAnimation()); mLinearContainer.setAnimation(createTranlationInAnimation()); return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onDestroyView() { dismiss(); super.onDestroyView(); } /***为mPanel创建从底部进入动画*/ private Animation createTranlationInAnimation() { TranslateAnimation translateAnimation = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 1, TranslateAnimation.RELATIVE_TO_SELF, 0); translateAnimation.setDuration(TRANSLATE_DURATION); return translateAnimation; } private Animation createTranlationOutAnimation() { TranslateAnimation translateAnimation = new TranslateAnimation( TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, 1); translateAnimation.setDuration(TRANSLATE_DURATION); translateAnimation.setFillAfter(true); return translateAnimation; } /**为背景View创建Aplha 进入动画*/ private Animation createAlphaInAnimation() { AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1); alphaAnimation.setDuration(ALPHA_DURATION); return alphaAnimation; } private Animation createAlphaOutAnimation() { AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0); alphaAnimation.setDuration(ALPHA_DURATION); alphaAnimation.setFillAfter(true); return alphaAnimation; } @SuppressWarnings("deprecation") private View createView() { int margin = (int) (10 * getResources().getDisplayMetrics().density); FrameLayout frameLayout = new FrameLayout(getActivity()); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); frameLayout.setLayoutParams(params); // 创建背景View mBgView = new View(getActivity()); mBgView.setLayoutParams(params); mBgView.setBackgroundColor(Color.argb(136, 0, 0, 0)); mBgView.setId(BG_VIEW_ID); // 创建背景View // 创建可操作的View mLinearContainer = new LinearLayout(getActivity()); mLinearContainer.setOrientation(LinearLayout.VERTICAL); // mLinearContainer.setBackgroundColor(0xFFFFFFFF); params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, Gravity.BOTTOM); params.leftMargin = margin; params.rightMargin = margin; mLinearContainer.setLayoutParams(params); // 创建可操作的View mListView = new ListView(getActivity()); mListView.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.simple_list_item, ARRAYS_STRINGS)); LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); mBtnCancle = new Button(getActivity()); mBtnCancle.setBackgroundDrawable(getResources().getDrawable(R.drawable.list_item_selector)); mBtnCancle.setId(CANCLE_BTN_ID); mBtnCancle.setText("取消"); linearParams.bottomMargin = margin; mLinearContainer.addView(mListView, linearParams); mLinearContainer.addView(mBtnCancle, linearParams); frameLayout.addView(mBgView); frameLayout.addView(mLinearContainer); OnItemClickListenerImpl onItemClickListenerImpl = new OnItemClickListenerImpl(); mListView.setOnItemClickListener(onItemClickListenerImpl); OnClickListenerImpl onClickListenerImpl = new OnClickListenerImpl(); mBgView.setOnClickListener(onClickListenerImpl); mBtnCancle.setOnClickListener(onClickListenerImpl); return frameLayout; } class OnItemClickListenerImpl implements OnItemClickListener { MainActivity activity = (MainActivity) getActivity(); @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (!activity.mIsDownload) { activity.wifiDownload(); Toast.makeText(getActivity(), "开始下载数据", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getActivity(), "已经开始离线下载了", Toast.LENGTH_SHORT).show(); } dismiss(); } } class OnClickListenerImpl implements OnClickListener { public void onClick(View v) { switch (v.getId()) { case BG_VIEW_ID: dismiss(); break; case CANCLE_BTN_ID: dismiss(); break; } } } public void dismiss() { getActivity().getSupportFragmentManager().popBackStack(); mLinearContainer.startAnimation(createTranlationOutAnimation()); mBgView.startAnimation(createAlphaOutAnimation()); mLinearContainer.postDelayed(new Runnable() { public void run() { mDecorView.removeView(mPanel); } }, ALPHA_DURATION); } }