package com.codbking.widget; import android.content.Context; import android.widget.TextView; import com.codbking.widget.genview.WheelGeneralAdapter; import com.codbking.widget.view.WheelView; import com.codbking.widget.bean.DateType; import java.util.Date; /** * Created by codbking on 2016/8/10. */ class DatePicker extends BaseWheelPick { private static final String TAG = "WheelPicker"; private WheelView yearView; private WheelView monthView; private WheelView dayView; private TextView weekView; private WheelView hourView; private WheelView minuteView; private Integer[] yearArr, mothArr, dayArr, hourArr, minutArr; private DatePickerHelper datePicker; public DateType type = DateType.TYPE_ALL; //开始时间 private Date startDate = new Date(); //年分限制,默认上下5年 private int yearLimt = 5; private OnChangeListener onChangeListener; private int selectDay; //选择时间回调 public void setOnChangeListener(OnChangeListener onChangeListener) { this.onChangeListener = onChangeListener; } public DatePicker(Context context, DateType type) { super(context); if(this.type!=null){ this.type = type; } } public void setStartDate(Date startDate) { this.startDate = startDate; } public void setYearLimt(int yearLimt) { this.yearLimt = yearLimt; } //初始化值 public void init() { this.minuteView = (WheelView) findViewById(R.id.minute); this.hourView = (WheelView) findViewById(R.id.hour); this.weekView = (TextView) findViewById(R.id.week); this.dayView = (WheelView) findViewById(R.id.day); this.monthView = (WheelView) findViewById(R.id.month); this.yearView = (WheelView) findViewById(R.id.year); switch (type) { case TYPE_ALL: this.minuteView.setVisibility(VISIBLE); this.hourView.setVisibility(VISIBLE); this.weekView.setVisibility(VISIBLE); this.dayView.setVisibility(VISIBLE); this.monthView.setVisibility(VISIBLE); this.yearView.setVisibility(VISIBLE); break; case TYPE_YMDHM: this.minuteView.setVisibility(VISIBLE); this.hourView.setVisibility(VISIBLE); this.weekView.setVisibility(GONE); this.dayView.setVisibility(VISIBLE); this.monthView.setVisibility(VISIBLE); this.yearView.setVisibility(VISIBLE); break; case TYPE_YMDH: this.minuteView.setVisibility(GONE); this.hourView.setVisibility(VISIBLE); this.weekView.setVisibility(GONE); this.dayView.setVisibility(VISIBLE); this.monthView.setVisibility(VISIBLE); this.yearView.setVisibility(VISIBLE); break; case TYPE_YMD: this.minuteView.setVisibility(GONE); this.hourView.setVisibility(GONE); this.weekView.setVisibility(GONE); this.dayView.setVisibility(VISIBLE); this.monthView.setVisibility(VISIBLE); this.yearView.setVisibility(VISIBLE); break; case TYPE_HM: this.minuteView.setVisibility(VISIBLE); this.hourView.setVisibility(VISIBLE); this.weekView.setVisibility(GONE); this.dayView.setVisibility(GONE); this.monthView.setVisibility(GONE); this.yearView.setVisibility(GONE); break; } datePicker = new DatePickerHelper(); datePicker.setStartDate(startDate, yearLimt); dayArr = datePicker.genDay(); yearArr = datePicker.genYear(); mothArr = datePicker.genMonth(); hourArr = datePicker.genHour(); minutArr = datePicker.genMinut(); weekView.setText(datePicker.getDisplayStartWeek()); setWheelListener(yearView, yearArr, false); setWheelListener(monthView, mothArr, true); setWheelListener(dayView, dayArr, true); setWheelListener(hourView, hourArr, true); setWheelListener(minuteView, minutArr, true); yearView.setCurrentItem(datePicker.findIndextByValue(datePicker.getToady(DatePickerHelper.Type.YEAR), yearArr)); monthView.setCurrentItem(datePicker.findIndextByValue(datePicker.getToady(DatePickerHelper.Type.MOTH), mothArr)); dayView.setCurrentItem(datePicker.findIndextByValue(datePicker.getToady(DatePickerHelper.Type.DAY), dayArr)); hourView.setCurrentItem(datePicker.findIndextByValue(datePicker.getToady(DatePickerHelper.Type.HOUR), hourArr)); minuteView.setCurrentItem(datePicker.findIndextByValue(datePicker.getToady(DatePickerHelper.Type.MINUTE), minutArr)); } protected String[] convertData(WheelView wheelView, Integer[] data) { if (wheelView == yearView) { return datePicker.getDisplayValue(data, "年"); } else if (wheelView == monthView) { return datePicker.getDisplayValue(data, "月"); } else if (wheelView == dayView) { return datePicker.getDisplayValue(data, "日"); } else if (wheelView == hourView) { return datePicker.getDisplayValue(data, ""); } else if (wheelView == minuteView) { return datePicker.getDisplayValue(data, ""); } return new String[0]; } @Override protected int getLayout() { return R.layout.cbk_wheel_picker; } @Override protected int getItemHeight() { return dayView.getItemHeight(); } @Override protected void setData(Object[] datas) { } private void setChangeDaySelect(int year, int moth) { dayArr = datePicker.genDay(year, moth); WheelGeneralAdapter adapter= (WheelGeneralAdapter) dayView.getViewAdapter(); adapter.setData(convertData(dayView, dayArr)); int indxt = datePicker.findIndextByValue(selectDay, dayArr); if (indxt == -1) { dayView.setCurrentItem(0); } else { dayView.setCurrentItem(indxt); } } @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { int year = yearArr[yearView.getCurrentItem()]; int moth = mothArr[monthView.getCurrentItem()]; int day = dayArr[dayView.getCurrentItem()]; int hour = hourArr[hourView.getCurrentItem()]; int minut = minutArr[minuteView.getCurrentItem()]; if (wheel == yearView || wheel == monthView) { setChangeDaySelect(year, moth); } else { selectDay = day; } if (wheel == yearView || wheel == monthView || wheel == dayView) { weekView.setText(datePicker.getDisplayWeek(year, moth, day)); } if (onChangeListener != null) { onChangeListener.onChanged(DateUtils.getDate(year, moth, day, hour, minut)); } } @Override public void onScrollingStarted(WheelView wheel) { } @Override public void onScrollingFinished(WheelView wheel) { } //获取选中日期 public Date getSelectDate() { int year = yearArr[yearView.getCurrentItem()]; int moth = mothArr[monthView.getCurrentItem()]; int day = dayArr[dayView.getCurrentItem()]; int hour = hourArr[hourView.getCurrentItem()]; int minut = minutArr[minuteView.getCurrentItem()]; return DateUtils.getDate(year, moth, day, hour, minut); } }