package com.xjf.repository.view; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import com.xjf.repository.R; import java.util.ArrayList; import java.util.Calendar; /** * ----------------------------------------------------------------- * User:xijiufu * Email:xjfsml@163.com * Version:1.0 * Time:2016/12/16--15:16 * Function: 年月日 时间 选择器 * ModifyHistory: * ----------------------------------------------------------------- */ public class SpecificDatePickerView extends LinearLayout { private WheelView mTimePickerStartYear; private WheelView mTimePickerStartMonth; private WheelView mTimePickerStartDay; private String month; private String day; private String currentYear = getYear(); private String currentMonth = getMonth(); private String currentDay = getDay(); /* private String selectYear; private String selectMonth; private String selectDay;*/ private Handler handler; public SpecificDatePickerView(Context context) { super(context); init(context); } public SpecificDatePickerView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { handler = new Handler(); } /** * 当View中所有的子控件均被映射成xml后触发 */ @Override protected void onFinishInflate() { super.onFinishInflate(); View view = LayoutInflater.from(getContext()).inflate(R.layout.layout_specific_date_picker, this); mTimePickerStartYear = (WheelView) view.findViewById(R.id.mTimePickerStartYear); mTimePickerStartMonth = (WheelView) view.findViewById(R.id.mTimePickerStartMonth); mTimePickerStartDay = (WheelView) view.findViewById(R.id.mTimePickerStartDay); initData(); mTimePickerStartYear.setData(getYearsData()); mTimePickerStartMonth.setData(getMonthsData(Integer.parseInt(month))); mTimePickerStartDay.setData(getDaysData(Integer.parseInt(day))); mTimePickerStartYear.setDefault(setYear(currentYear)); mTimePickerStartMonth.setDefault(setMonth(currentMonth)); mTimePickerStartDay.setDefault(Integer.parseInt(currentDay) - 1); mTimePickerStartYear.setOnSelectListener(new WheelView.OnSelectListener() { @Override public void endSelect(int id, String text) { // selectYear = text; currentYear = text.substring(0, text.length() - 1); handler.post(new Runnable() { @Override public void run() { //获取月份 setDate(currentYear, month, day); // setYear(currentYear); mTimePickerStartMonth.refreshData(getMonthsData(Integer.parseInt(month))); mTimePickerStartMonth.setDefault(0); //获取1月份天数 calDays(currentYear, String.valueOf(1)); mTimePickerStartDay.refreshData(getDaysData(Integer.parseInt(day))); mTimePickerStartDay.setDefault(0); //获取天数 calDays(currentYear, month); } }); } @Override public void selecting(int id, String text) { } }); mTimePickerStartMonth.setOnSelectListener(new WheelView.OnSelectListener() { @Override public void endSelect(int id, String text) { // selectMonth = text; text = text.substring(0, text.length() - 1); setMonth(text); handler.post(new Runnable() { @Override public void run() { mTimePickerStartDay.refreshData(getDaysData(Integer.parseInt(day))); mTimePickerStartDay.setDefault(0); calDays(currentYear, month); } }); } @Override public void selecting(int id, String text) { } }); mTimePickerStartDay.setOnSelectListener(new WheelView.OnSelectListener() { @Override public void endSelect(int id, String text) { // selectDay = text; } @Override public void selecting(int id, String text) { } }); } /** * 获取选中的年份 * * @return */ public String getSelectYear() { if (mTimePickerStartYear == null) { return null; } return mTimePickerStartYear.getSelectedText(); } /** * 设置起始默认年份 * * @param index */ public void setDefaultStartYear(int index) { if (mTimePickerStartYear == null) { return; } mTimePickerStartYear.setDefault(index - 1); } /** * 获取选中的月份 * * @return */ public String getSelectMonth() { if (mTimePickerStartMonth == null) { return null; } return mTimePickerStartMonth.getSelectedText(); } /** * 设置起始默认月份 * * @param index */ public void setDefaultStartMonth(int index) { if (mTimePickerStartMonth == null) { return; } mTimePickerStartMonth.setDefault(index - 1); } /** * 获取选中的天 * * @return */ public String getSelectDay() { if (mTimePickerStartDay == null) { return null; } return mTimePickerStartDay.getSelectedText(); } /** * 设置起始默认天数 * * @param index */ public void setDefaultStartDay(int index) { if (mTimePickerStartDay == null) { return; } mTimePickerStartDay.setDefault(index - 1); } private ArrayList<String> getYearsData() { ArrayList<String> list = new ArrayList<>(); for (int i = Integer.parseInt(getYear()); i > 1950; i--) { list.add(i + "年"); // list.add(i + ""); } return list; } private ArrayList<String> getMonthsData(int months) { ArrayList<String> list = new ArrayList<>(); for (int i = 1; i <= months; i++) { list.add(format(i) + "月"); // list.add(i + ""); } return list; } private ArrayList<String> getDaysData(int days) { ArrayList<String> list = new ArrayList<>(); for (int i = 1; i <= days; i++) { list.add(format(i) + "日"); // list.add(i + ""); } return list; } private String format(int value) { if (value < 10) { return "0" + value; } return String.valueOf(value); } private String getYear() { Calendar c = Calendar.getInstance(); return c.get(Calendar.YEAR) + ""; } private String getMonth() { Calendar c = Calendar.getInstance(); return format(c.get(Calendar.MONTH) + 1); } private String getDay() { Calendar c = Calendar.getInstance(); return c.get(Calendar.DATE) + ""; } private void initData() { setDate(getYear(), getMonth(), getDay()); // this.currentDay = 1 + ""; // this.currentMonth = 1 + ""; } /** * 设置年月日 * * @param year * @param month * @param day */ public void setDate(String year, String month, String day) { /*selectYear = year + "年"; selectMonth = month + "月"; selectDay = day + "日"; */ /*selectYear = year; selectMonth = month; selectDay = day; */ this.currentYear = year; this.currentMonth = month; this.currentDay = day; if (year.equals(getYear())) { this.month = getMonth(); } else { this.month = 12 + ""; } calDays(year, month); } /** * 设置年份 * * @param year */ public int setYear(String year) { int yearIndex = 0; if (!year.equals(getYear())) { this.month = 12 + ""; } else { this.month = getMonth(); } for (int i = Integer.parseInt(getYear()); i > 1950; i--) { if (i == Integer.parseInt(year)) { return yearIndex; } yearIndex++; } return yearIndex; } /** * 设置月份 * * @param month * @param month * @return */ public int setMonth(String month) { int monthIndex = 0; calDays(currentYear, month); for (int i = 1; i < Integer.parseInt(this.month); i++) { if (Integer.parseInt(month) == i) { return monthIndex; } else { monthIndex++; } } return monthIndex; } /** * 计算每月多少天 * * @param month * @param year */ public void calDays(String year, String month) { boolean leayYear = false; if (Integer.parseInt(year) % 4 == 0 && Integer.parseInt(year) % 100 != 0) { leayYear = true; } else { leayYear = false; } for (int i = 1; i <= 12; i++) { switch (Integer.parseInt(month)) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: this.day = 31 + ""; break; case 2: if (leayYear) { this.day = 29 + ""; } else { this.day = 28 + ""; } break; case 4: case 6: case 9: case 11: this.day = 30 + ""; break; } } //主要用于当月只显示前面天数 不显示后面天数 if (year.equals(getYear()) && month.equals(getMonth())) { this.day = getDay(); } } } //===========================================================================// // // // _ooOoo_ // // o8888888o // // 88" . "88 // // (| -_- |) // // O\ = /O // // ____/`---'\____ // // . ' \\| |// `. // // / \\||| : |||// \ // // / _||||| -:- |||||- \ // // | | \\\ - /// | | // // | \_| ''\---/'' | | // // \ .-\__ `-` ___/-. / // // ___`. .' /--.--\ `. . __ // // ."" '< `.___\_<|>_/___.' >'"". // // | | : `- \`.;`\ _ /`;.`/ - ` : | | // // \ \ `-. \_ __\ /__ _/ .-` / / // // ======`-.____`-.___\_____/___.-`____.-'====== // // `=---=' // // // // ............................................. // // 佛祖镇楼 BUG辟易 // // 佛曰: // // 写字楼里写字间,写字间里程序员; // // 程序人员写程序,又拿程序换酒钱。 // // 酒醒只在网上坐,酒醉还来网下眠; // // 酒醉酒醒日复日,网上网下年复年。 // // 但愿老死电脑间,不愿鞠躬老板前; // // 奔驰宝马贵者趣,公交自行程序员。 // // 别人笑我忒疯癫,我笑自己命太贱; // // 不见满街漂亮妹,哪个归得程序员? // //===========================================================================//