package com.bestapp.yikuair.fragments; import java.util.ArrayList; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.os.Handler; import android.os.Message; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.TranslateAnimation; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.SimpleAdapter; import android.widget.TextView; import com.bestapp.yikuair.R; import com.bestapp.yikuair.utils.UserInfo; public class ContactMenuView extends View { private Context mContext; private PopupWindow popWindow; private View popview; public ListView listview; public ArrayList<MenuItem> mitems = null; RelativeLayout layout; private TranslateAnimation myMenuOpen; private TranslateAnimation myMenuClose; private int menuOpenMillis = 500; private int menuCloseMillis = 500; private final int MENU_OPEN_ANIM = 1; private final int MENU_CLOSE_ANIM = 2; private MyHandler myHandler = new MyHandler(); private boolean isDismissing = false; private View imgBtn; class MyHandler extends Handler { @Override public void handleMessage(Message msg) { if (msg == null) { return; } super.handleMessage(msg); switch (msg.what) { case MENU_OPEN_ANIM: startMenuOpenAnimation(); break; case MENU_CLOSE_ANIM: if (popWindow != null) { popWindow.dismiss(); } isDismissing = false; break; } } } public ContactMenuView(Context context, View btn) { super(context); mContext = context; imgBtn = btn; mitems = new ArrayList<MenuItem>(); LayoutInflater layoutInflater = (LayoutInflater) (mContext) .getSystemService(mContext.LAYOUT_INFLATER_SERVICE); popview = layoutInflater.inflate(R.layout.hotalk_menu_view, null); listview = (ListView) popview.findViewById(R.id.hotalk_menu_listview); layout = (RelativeLayout) popview .findViewById(R.id.hotalk_menu_view_layout); adapter = new ItemTextListAdapter(mContext); layout.setOnClickListener(onclick); ViewGroup.LayoutParams params = listview.getLayoutParams(); listview.setFocusable(true); listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); listview.setAdapter(adapter); listview.setFocusableInTouchMode(true); listview.setMinimumHeight(200); listview.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (!isDismissing) { isDismissing = true; if ((keyCode == KeyEvent.KEYCODE_MENU) && (popWindow.isShowing())) { close(); } else if (((keyCode == KeyEvent.KEYCODE_BACK) && (popWindow .isShowing()))) { close(); } } return false; } }); } public void add(int key, String value) { remove(key); MenuItem item = new MenuItem(key, value); mitems.add(item); adapter.notifyDataSetChanged(); } public void remover(int position) { if (mitems.size() > position) { mitems.remove(position); } } public void remove(int key) { MenuItem item = null; for (int i = 0; i < mitems.size(); i++) { item = mitems.get(i); if (item.MenuKey == key) { mitems.remove(i); break; } } } public void clear() { mitems.clear(); } ItemTextListAdapter adapter; private OnClickListener onclick = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.hotalk_menu_view_layout: close(); break; default: break; } } }; public void setItems(ArrayList<String> items) { mitems.clear(); if (items != null && items.size() > 0) { for (int i = 0; i < items.size(); i++) { MenuItem item = new MenuItem(0, items.get(i)); mitems.add(item); } } } public void show(View view, int menuWidth, int menuMarginLeft) { try { if (popWindow == null) { popWindow = new PopupWindow(popview, UserInfo.screenWidth / 2, UserInfo.screenHeight / 2 - 150); } if (popview != null) { if (popWindow.isShowing()) { startMenuCloseAnimation(); } else { if (mitems != null && mitems.size() > 0) { popWindow.setFocusable(true); popWindow.setOutsideTouchable(true); popWindow.setBackgroundDrawable(new BitmapDrawable()); popWindow .setOnDismissListener(new PopupWindow.OnDismissListener() { public void onDismiss() { // TODO Auto-generated method stub imgBtn.setBackgroundResource(R.drawable.ico_open); } }); popWindow.update(); menuMarginLeft = (UserInfo.screenWidth - UserInfo.screenWidth / 2 ) / 2 ; popWindow.showAsDropDown(view, menuMarginLeft, 3); } } } } catch (Exception e) { e.printStackTrace(); close(); } } public boolean getIsShow() { if (popWindow != null) { return popWindow.isShowing(); } else return false; } public void close() { if (popWindow != null && popWindow.isShowing()) { startMenuCloseAnimation(); } } private void startMenuOpenAnimation() { menuOpenMillis = (mitems.size() * 100) + 100; if (menuOpenMillis > 500) { menuOpenMillis = 500; } myMenuOpen = new TranslateAnimation(0f, 0f, -(listview.getHeight() + 1), 0f); myMenuOpen.setDuration(menuOpenMillis); listview.startAnimation(myMenuOpen); } private void startMenuCloseAnimation() { myMenuClose = new TranslateAnimation(0f, 0f, 0f, -(listview.getHeight() + 1)); myMenuClose.setDuration(menuCloseMillis); layout.startAnimation(myMenuClose); myHandler.sendEmptyMessageDelayed(MENU_CLOSE_ANIM, menuCloseMillis); } public class ItemTextListAdapter extends SimpleAdapter { public ItemTextListAdapter(Context context) { super(context, null, 0, null, null); } @Override public int getCount() { return mitems.size(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { ItemHolder holder; if (convertView == null || convertView.getTag() == null || !(convertView.getTag() instanceof ItemHolder)) { convertView = LayoutInflater.from(mContext).inflate( R.layout.hotalk_menu_item_view, null, true); holder = new ItemHolder(); holder.menuName = (TextView) convertView .findViewById(R.id.textview); } else { holder = (ItemHolder) convertView .getTag(R.layout.hotalk_menu_item_view); } convertView.setTag(holder); convertView.setTag(R.layout.hotalk_menu_item_view, holder); MenuItem item = mitems.get(position); holder.menuName.setText(item.MenuValue); convertView.setTag(item.MenuKey); return convertView; } } public static class ItemHolder { TextView menuName; } public class MenuItem implements Comparable { int MenuKey; String MenuValue; public MenuItem(int key, String value) { MenuKey = key; MenuValue = value; } @Override public int compareTo(Object o) { return this.MenuKey - ((MenuItem) o).MenuKey; } } }