package cn.com.basic.face.dialog; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; import com.bsk.zhangbo.demoforbsk.R; import cn.com.basic.face.base.MainActivity; import cn.com.basic.face.util.OkClickedListener; import com.lidroid.xutils.ViewUtils; import com.lidroid.xutils.view.annotation.ViewInject; import com.lidroid.xutils.view.annotation.event.OnClick; import cn.com.basic.face.dialog.wheelview.widget.WheelView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; public class CountryDialog extends PopupWindow implements WheelView.OnWheelItemSelectedListener { @ViewInject(R.id.dialog_country_ok) private TextView dialog_country_ok; @ViewInject(R.id.dialog_country_cancel) private TextView dialog_country_cancel; @ViewInject(R.id.dialog_country_name_first_letter) private WheelView dialog_country_name_first_letter; @ViewInject(R.id.dialog_country_name) private WheelView dialog_country_name; private View view; private static HashMap> countriesGroupByFirstLetter = new HashMap<>(); private static List uniqueFirstLetterList = new ArrayList<>(); private List countriesWithSameFirstLetter = new ArrayList<>(); public static void setCountries(List _uniqueFirstLetterList, HashMap> _countriesGroupByFirstLetter) { uniqueFirstLetterList = _uniqueFirstLetterList; countriesGroupByFirstLetter = _countriesGroupByFirstLetter; } public static boolean hasCountries() { return countriesGroupByFirstLetter.size() > 0 ? true : false; } @OnClick(R.id.dialog_country_ok) public void dialog_country_ok_click(View view) { for (OkClickedListener okButtonClickedListener : okButtonClickedListeners) { if (dialog_country_name_first_letter.getCurrentPosition() >= 0) { countriesWithSameFirstLetter = countriesGroupByFirstLetter.get(uniqueFirstLetterList.get(dialog_country_name_first_letter.getCurrentPosition())); okButtonClickedListener.onSelected(countriesWithSameFirstLetter.get(dialog_country_name.getCurrentPosition())); } } dismiss(); } @OnClick(R.id.dialog_country_cancel) public void dialog_country_cancel_click(View view) { dismiss(); } public CountryDialog(View parentView, OkClickedListener okButtonClickedListener, String defaultValue) { view = LayoutInflater.from(MainActivity.getInstance()).inflate(R.layout.dialog_country, null); ViewUtils.inject(this, view); if (defaultValue != null && !"".equals(defaultValue)) { for (int i = 0; i < uniqueFirstLetterList.size(); i++) { String firstLetter = uniqueFirstLetterList.get(i); int j = 0; for(String countryName : countriesGroupByFirstLetter.get(firstLetter)) { if (defaultValue.equals(countryName)) { dialog_country_name_first_letter.setSelection(i); dialog_country_name.setSelection(j); break; } j++; } } } this.countriesWithSameFirstLetter = countriesGroupByFirstLetter.get(uniqueFirstLetterList.get(dialog_country_name_first_letter.getSelection())); WheelView.WheelViewStyle wheelViewStyle = new WheelView.WheelViewStyle(); wheelViewStyle.selectedTextColor = Color.parseColor("#11c3e3"); wheelViewStyle.textColor = Color.parseColor("#bcc6cf"); wheelViewStyle.selectedTextSize = 22; wheelViewStyle.textSize = 16; wheelViewStyle.holoBorderColor = Color.parseColor("#11c3e3"); dialog_country_name_first_letter.setWheelAdapter(new SelectDialog.WheelAdapter(MainActivity.getInstance())); dialog_country_name_first_letter.setSkin(WheelView.Skin.Holo); dialog_country_name_first_letter.setWheelSize(5); dialog_country_name_first_letter.setBackgroundResource(R.color.colorBackground); dialog_country_name_first_letter.setStyle(wheelViewStyle); //dialog_country_name_first_letter.setSelection(4); dialog_country_name.setWheelAdapter(new SelectDialog.WheelAdapter(MainActivity.getInstance())); dialog_country_name.setSkin(WheelView.Skin.Holo); dialog_country_name.setWheelSize(5); dialog_country_name.setBackgroundResource(R.color.colorBackground); dialog_country_name.setStyle(wheelViewStyle); initData(); view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { View popLayout = view.findViewById(R.id.dialog_country_linear_layout); int top = popLayout.getTop(); int bottom = popLayout.getBottom(); int left = popLayout.getLeft(); int right = popLayout.getRight(); int y = (int) motionEvent.getY(); int x = (int) motionEvent.getX(); if (motionEvent.getAction() == MotionEvent.ACTION_UP) { if (y < top || y > bottom) { dismiss(); } if (x < left || x > right) { dismiss(); } } return true; } }); this.setOutsideTouchable(true); this.setFocusable(true); this.setContentView(this.view); this.setHeight(RelativeLayout.LayoutParams.MATCH_PARENT); this.setWidth(RelativeLayout.LayoutParams.MATCH_PARENT); this.setBackgroundDrawable(new ColorDrawable(0x7f000000)); this.setAnimationStyle(R.style.PopupAnimation); okButtonClickedListeners.add(okButtonClickedListener); showAtLocation(parentView, Gravity.CENTER,0,0); } @Override public void onItemSelected(int position, Object o) { countriesWithSameFirstLetter = countriesGroupByFirstLetter.get(uniqueFirstLetterList.get(dialog_country_name_first_letter.getCurrentPosition())); } private void initData() { dialog_country_name_first_letter.setWheelData(uniqueFirstLetterList); dialog_country_name_first_letter.join(dialog_country_name); dialog_country_name_first_letter.joinDatas(countriesGroupByFirstLetter); dialog_country_name.setWheelData(countriesWithSameFirstLetter); } private List okButtonClickedListeners = new ArrayList(); public void addOkButtonClickedListener(OkClickedListener okButtonClickedListener) { this.okButtonClickedListeners.add(okButtonClickedListener); } }