@Override protected void onFinishInflate() { // TODO Auto-generated method stub super.onFinishInflate(); LayoutInflater.from(getContext()).inflate(R.layout.su_date_picker, this); // 初始化日历 calendar = Calendar.getInstance(); calendarUtil = CalendarUtil.getSingleton(); // 获取控件引用 yearPicker = (ScrollerNumberPicker) findViewById(R.id.year); monthPicker = (ScrollerNumberPicker) findViewById(R.id.month); dayPicker = (ScrollerNumberPicker) findViewById(R.id.day); // 获取当前年月日 int y = calendar.get(Calendar.YEAR); int m = calendar.get(Calendar.MONTH); int d = calendar.get(Calendar.DAY_OF_MONTH); // 设置数据 yearPicker.setData(calendarUtil.getYears()); monthPicker.setData(calendarUtil.getMonths()); dayPicker.setData(calendarUtil.getDays(y, m)); // 设置默认值为当前 yearPicker.setDefault(y - 1970); monthPicker.setDefault(m); dayPicker.setDefault(d - 1); yearPicker.setOnSelectListener( new OnSelectListener() { @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub if (text == null || text.equals("")) return; if (tempYearIndex != id) { String selectDay = dayPicker.getSelectedText(); if (selectDay == null || selectDay.equals("")) return; String selectMonth = monthPicker.getSelectedText(); if (selectMonth == null || selectMonth.equals("")) return; dayPicker.setData( calendarUtil.getDays(Integer.valueOf(text), Integer.valueOf(selectMonth) - 1)); int lastDay = Integer.valueOf(dayPicker.getItemText(dayPicker.getListSize() - 1)); if (Integer.valueOf(selectDay) > lastDay) { dayPicker.setDefault(lastDay - 1); } else { dayPicker.setDefault(Integer.valueOf(selectDay) - 1); } } tempYearIndex = id; Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } }); monthPicker.setOnSelectListener( new OnSelectListener() { @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub if (text.equals("") || text == null) return; if (tempMonthIndex != id) { String selectDay = dayPicker.getSelectedText(); if (selectDay == null || selectDay.equals("")) return; String selectYear = yearPicker.getSelectedText(); if (selectYear == null || selectYear.equals("")) return; dayPicker.setData( calendarUtil.getDays(Integer.valueOf(selectYear), Integer.valueOf(text) - 1)); int lastDay = Integer.valueOf(dayPicker.getItemText(dayPicker.getListSize() - 1)); if (Integer.valueOf(selectDay) > lastDay) { dayPicker.setDefault(lastDay - 1); } else { dayPicker.setDefault(Integer.valueOf(selectDay) - 1); } } tempMonthIndex = id; Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } }); dayPicker.setOnSelectListener( new OnSelectListener() { @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } }); }
/** * 日期选择控件 * * @author suzhenpeng */ public class DatePicker extends LinearLayout { /** 滑动控件 */ private ScrollerNumberPicker yearPicker; private ScrollerNumberPicker monthPicker; private ScrollerNumberPicker dayPicker; /** 日历 */ private CalendarUtil calendarUtil = CalendarUtil.getSingleton(); /** 日历 */ public Calendar calendar; /** 临时日期 */ private int tempYearIndex = -1; private int tempMonthIndex = -1; /** 选择监听 */ private OnSelectingListener onSelectingListener; /** 刷新界面 */ private static final int REFRESH_VIEW = 0x001; public DatePicker(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public DatePicker(Context context) { super(context); // TODO Auto-generated constructor stub } @Override protected void onFinishInflate() { // TODO Auto-generated method stub super.onFinishInflate(); LayoutInflater.from(getContext()).inflate(R.layout.su_date_picker, this); // 初始化日历 calendar = Calendar.getInstance(); calendarUtil = CalendarUtil.getSingleton(); // 获取控件引用 yearPicker = (ScrollerNumberPicker) findViewById(R.id.year); monthPicker = (ScrollerNumberPicker) findViewById(R.id.month); dayPicker = (ScrollerNumberPicker) findViewById(R.id.day); // 获取当前年月日 int y = calendar.get(Calendar.YEAR); int m = calendar.get(Calendar.MONTH); int d = calendar.get(Calendar.DAY_OF_MONTH); // 设置数据 yearPicker.setData(calendarUtil.getYears()); monthPicker.setData(calendarUtil.getMonths()); dayPicker.setData(calendarUtil.getDays(y, m)); // 设置默认值为当前 yearPicker.setDefault(y - 1970); monthPicker.setDefault(m); dayPicker.setDefault(d - 1); yearPicker.setOnSelectListener( new OnSelectListener() { @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub if (text == null || text.equals("")) return; if (tempYearIndex != id) { String selectDay = dayPicker.getSelectedText(); if (selectDay == null || selectDay.equals("")) return; String selectMonth = monthPicker.getSelectedText(); if (selectMonth == null || selectMonth.equals("")) return; dayPicker.setData( calendarUtil.getDays(Integer.valueOf(text), Integer.valueOf(selectMonth) - 1)); int lastDay = Integer.valueOf(dayPicker.getItemText(dayPicker.getListSize() - 1)); if (Integer.valueOf(selectDay) > lastDay) { dayPicker.setDefault(lastDay - 1); } else { dayPicker.setDefault(Integer.valueOf(selectDay) - 1); } } tempYearIndex = id; Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } }); monthPicker.setOnSelectListener( new OnSelectListener() { @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub if (text.equals("") || text == null) return; if (tempMonthIndex != id) { String selectDay = dayPicker.getSelectedText(); if (selectDay == null || selectDay.equals("")) return; String selectYear = yearPicker.getSelectedText(); if (selectYear == null || selectYear.equals("")) return; dayPicker.setData( calendarUtil.getDays(Integer.valueOf(selectYear), Integer.valueOf(text) - 1)); int lastDay = Integer.valueOf(dayPicker.getItemText(dayPicker.getListSize() - 1)); if (Integer.valueOf(selectDay) > lastDay) { dayPicker.setDefault(lastDay - 1); } else { dayPicker.setDefault(Integer.valueOf(selectDay) - 1); } } tempMonthIndex = id; Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } }); dayPicker.setOnSelectListener( new OnSelectListener() { @Override public void selecting(int id, String text) { // TODO Auto-generated method stub } @Override public void endSelect(int id, String text) { // TODO Auto-generated method stub Message message = new Message(); message.what = REFRESH_VIEW; handler.sendMessage(message); } }); } public void setTime(long time) { setDate(new Date(time)); } public void setDate(Date date) { int year; if (date.getYear() < 70) { year = (70 + 1900); } else { year = (date.getYear() + 1900); } setTime(year, date.getMonth() + 1, date.getDay() + 1); } public void setTime(int year, int month, int day) { if (month > 12) return; if (day > 31) return; if (month <= 0 || year <= 0 || day <= 0) return; // 设置数据 yearPicker.setData(calendarUtil.getYears()); monthPicker.setData(calendarUtil.getMonths()); dayPicker.setData(calendarUtil.getDays(year, month - 1)); // 设置默认值为当前 yearPicker.setDefault(year - 1970); monthPicker.setDefault(month - 1); if ((day - 1) >= calendarUtil.getDays(year, month - 1).size()) { dayPicker.setDefault(calendarUtil.getDays(year, month - 1).size() - 1); } else { dayPicker.setDefault(day - 1); } } /** * 获取时间 * * @return */ public Date getDate() { String timeString = yearPicker.getSelectedText() + "-" + monthPicker.getSelectedText() + "-" + dayPicker.getSelectedText(); Date date = new Date(Long.valueOf(formatToTime(timeString, "yyyy-MM-dd"))); return date; } /** * 获取时间戳 * * @return */ public long getTime() { return getDate().getTime(); } public int getYear() { return Integer.valueOf(yearPicker.getSelectedText()); } public int getMonth() { return Integer.valueOf(monthPicker.getSelectedText()); } public int getDay() { return Integer.valueOf(dayPicker.getSelectedText()); } public String getFormaTime() { return (yearPicker.getSelectedText() + "-" + monthPicker.getSelectedText() + "-" + dayPicker.getSelectedText()); } public String getFormatTime(String format) { return getFormatTime(getTime(), format); } public void setOnSelectingListener(OnSelectingListener onSelectingListener) { this.onSelectingListener = onSelectingListener; } /** * 从格式化时间获取time * * @param time * @param format * @return */ public static String formatToTime(String time, String format) { Date date = null; SimpleDateFormat formatTime = new SimpleDateFormat(format, Locale.CHINA); try { try { date = formatTime.parse(time); } catch (java.text.ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return String.valueOf(date.getTime()); } /** * 返回指定格式时间 * * @param time * @param format * @return */ public static String getFormatTime(long time, String format) { SimpleDateFormat dateFormat = new SimpleDateFormat(format, Locale.CHINA); return dateFormat.format(time); } @SuppressLint("HandlerLeak") Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); switch (msg.what) { case REFRESH_VIEW: if (onSelectingListener != null) onSelectingListener.selected(true); break; default: break; } } }; /** * 日期监听 * * @author suzhenpeng */ public interface OnSelectingListener { public void selected(boolean selected); } }