package cn.qqtheme.framework.picker;
import android.app.Activity;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Locale;
import cn.qqtheme.framework.util.DateUtils;
import cn.qqtheme.framework.util.LogUtils;
import cn.qqtheme.framework.widget.WheelView;
/**
* 日期时间选择器,可同时选中日期及时间,另见{@link DatePicker}和{@link TimePicker}
* <p/>
* Created by Dong on 2016/5/13.
* Refactored by 李玉江 on 2016/12/31.
*/
public class DateTimePicker extends WheelPicker {
/**
* 不显示
*/
public static final int NONE = -1;
/**
* 年月日
*/
public static final int YEAR_MONTH_DAY = 0;
/**
* 年月
*/
public static final int YEAR_MONTH = 1;
/**
* 月日
*/
public static final int MONTH_DAY = 2;
/**
* 24小时
*/
public static final int HOUR_24 = 3;
/**
* @deprecated use {@link #HOUR_24} instead
*/
@Deprecated
public static final int HOUR_OF_DAY = 3;
/**
* 12小时
*/
public static final int HOUR_12 = 4;
/**
* @deprecated use {@link #HOUR_12} instead
*/
@Deprecated
public static final int HOUR = 4;
private ArrayList<String> years = new ArrayList<>();
private ArrayList<String> months = new ArrayList<>();
private ArrayList<String> days = new ArrayList<>();
private ArrayList<String> hours = new ArrayList<>();
private ArrayList<String> minutes = new ArrayList<>();
private String yearLabel = "年", monthLabel = "月", dayLabel = "日";
private String hourLabel = "时", minuteLabel = "分";
private int selectedYearIndex = 0, selectedMonthIndex = 0, selectedDayIndex = 0;
private String selectedHour = "", selectedMinute = "";
private OnWheelListener onWheelListener;
private OnDateTimePickListener onDateTimePickListener;
private int dateMode = YEAR_MONTH_DAY, timeMode = HOUR_24;
private int startYear = 2010, startMonth = 1, startDay = 1;
private int endYear = 2020, endMonth = 12, endDay = 31;
private int startHour, startMinute = 0;
private int endHour, endMinute = 59;
private int textSize = WheelView.TEXT_SIZE;
private boolean useWeight = false;
@IntDef(value = {NONE, YEAR_MONTH_DAY, YEAR_MONTH, MONTH_DAY})
@Retention(RetentionPolicy.SOURCE)
public @interface DateMode {
}
@IntDef(value = {NONE, HOUR_24, HOUR_12})
@Retention(RetentionPolicy.SOURCE)
public @interface TimeMode {
}
/**
* @see #HOUR_24
* @see #HOUR_12
*/
public DateTimePicker(Activity activity, @TimeMode int timeMode) {
this(activity, YEAR_MONTH_DAY, timeMode);
}
public DateTimePicker(Activity activity, @DateMode int dateMode, @TimeMode int timeMode) {
super(activity);
if (dateMode == NONE && timeMode == NONE) {
throw new IllegalArgumentException("The modes are NONE at the same time");
}
if (dateMode == YEAR_MONTH_DAY && timeMode != NONE) {
if (screenWidthPixels < 720) {
textSize = 14;//年月日时分,比较宽,设置字体小一点才能显示完整
} else if (screenWidthPixels < 480) {
textSize = 12;
}
}
this.dateMode = dateMode;
//根据时间模式初始化小时范围
if (timeMode == HOUR_12) {
startHour = 1;
endHour = 12;
} else {
startHour = 0;
endHour = 23;
}
this.timeMode = timeMode;
}
/**
* 是否使用比重来平分布局
*/
public void setUseWeight(boolean useWeight) {
this.useWeight = useWeight;
}
/**
* 设置年份范围
*
* @deprecated use {@link #setDateRangeStart(int, int, int)}
* and {@link #setDateRangeEnd(int, int, int)} or instead
*/
@Deprecated
public void setRange(int startYear, int endYear) {
if (dateMode == NONE) {
throw new IllegalArgumentException("Date mode invalid");
}
this.startYear = startYear;
this.endYear = endYear;
initYearData();
}
/**
* 设置范围:开始的年月日
*/
public void setDateRangeStart(int startYear, int startMonth, int startDay) {
if (dateMode == NONE) {
throw new IllegalArgumentException("Date mode invalid");
}
this.startYear = startYear;
this.startMonth = startMonth;
this.startDay = startDay;
initYearData();
}
/**
* 设置范围:结束的年月日
*/
public void setDateRangeEnd(int endYear, int endMonth, int endDay) {
if (dateMode == NONE) {
throw new IllegalArgumentException("Date mode invalid");
}
this.endYear = endYear;
this.endMonth = endMonth;
this.endDay = endDay;
initYearData();
}
/**
* 设置范围:开始的年月日
*/
public void setDateRangeStart(int startYearOrMonth, int startMonthOrDay) {
if (dateMode == NONE) {
throw new IllegalArgumentException("Date mode invalid");
}
if (dateMode == YEAR_MONTH_DAY) {
throw new IllegalArgumentException("Not support year/month/day mode");
}
if (dateMode == YEAR_MONTH) {
this.startYear = startYearOrMonth;
this.startMonth = startMonthOrDay;
} else if (dateMode == MONTH_DAY) {
int year = Calendar.getInstance(Locale.CHINA).get(Calendar.YEAR);
startYear = endYear = year;
this.startMonth = startYearOrMonth;
this.startDay = startMonthOrDay;
}
initYearData();
}
/**
* 设置范围:结束的年月日
*/
public void setDateRangeEnd(int endYearOrMonth, int endMonthOrDay) {
if (dateMode == NONE) {
throw new IllegalArgumentException("Date mode invalid");
}
if (dateMode == YEAR_MONTH_DAY) {
throw new IllegalArgumentException("Not support year/month/day mode");
}
if (dateMode == YEAR_MONTH) {
this.endYear = endYearOrMonth;
this.endMonth = endMonthOrDay;
} else if (dateMode == MONTH_DAY) {
this.endMonth = endYearOrMonth;
this.endDay = endMonthOrDay;
}
initYearData();
}
/**
* 设置范围:开始的时分
*/
public void setTimeRangeStart(int startHour, int startMinute) {
if (timeMode == NONE) {
throw new IllegalArgumentException("Time mode invalid");
}
boolean illegal = false;
if (startHour < 0 || startMinute < 0 || startMinute > 59) {
illegal = true;
}
if (timeMode == HOUR_12 && (startHour == 0 || startHour > 12)) {
illegal = true;
}
if (timeMode == HOUR_24 && startHour >= 24) {
illegal = true;
}
if (illegal) {
throw new IllegalArgumentException("Time out of range");
}
this.startHour = startHour;
this.startMinute = startMinute;
initHourData();
}
/**
* 设置范围:结束的时分
*/
public void setTimeRangeEnd(int endHour, int endMinute) {
if (timeMode == NONE) {
throw new IllegalArgumentException("Time mode invalid");
}
boolean illegal = false;
if (endHour < 0 || endMinute < 0 || endMinute > 59) {
illegal = true;
}
if (timeMode == HOUR_12 && (endHour == 0 || endHour > 12)) {
illegal = true;
}
if (timeMode == HOUR_24 && endHour >= 24) {
illegal = true;
}
if (illegal) {
throw new IllegalArgumentException("Time out of range");
}
this.endHour = endHour;
this.endMinute = endMinute;
initHourData();
}
/**
* 设置年月日时分的显示单位
*/
public void setLabel(String yearLabel, String monthLabel, String dayLabel, String hourLabel, String minuteLabel) {
this.yearLabel = yearLabel;
this.monthLabel = monthLabel;
this.dayLabel = dayLabel;
this.hourLabel = hourLabel;
this.minuteLabel = minuteLabel;
}
/**
* 设置默认选中的年月日时分
*/
public void setSelectedItem(int year, int month, int day, int hour, int minute) {
if (dateMode != YEAR_MONTH_DAY) {
throw new IllegalArgumentException("Date mode invalid");
}
LogUtils.verbose(this, "change months and days while set selected");
changeMonthData(year);
changeDayData(year, month);
selectedYearIndex = findItemIndex(years, year);
selectedMonthIndex = findItemIndex(months, month);
selectedDayIndex = findItemIndex(days, day);
if (timeMode != NONE) {
selectedHour = DateUtils.fillZero(hour);
selectedMinute = DateUtils.fillZero(minute);
}
}
/**
* 设置默认选中的年月时分或者月日时分
*/
public void setSelectedItem(int yearOrMonth, int monthOrDay, int hour, int minute) {
if (dateMode == YEAR_MONTH_DAY) {
throw new IllegalArgumentException("Date mode invalid");
}
if (dateMode == MONTH_DAY) {
LogUtils.verbose(this, "change months and days while set selected");
int year = Calendar.getInstance(Locale.CHINA).get(Calendar.YEAR);
startYear = endYear = year;
changeMonthData(year);
changeDayData(year, yearOrMonth);
selectedMonthIndex = findItemIndex(months, yearOrMonth);
selectedDayIndex = findItemIndex(days, monthOrDay);
} else if (dateMode == YEAR_MONTH) {
LogUtils.verbose(this, "change months while set selected");
changeMonthData(yearOrMonth);
selectedYearIndex = findItemIndex(years, yearOrMonth);
selectedMonthIndex = findItemIndex(months, monthOrDay);
}
if (timeMode != NONE) {
selectedHour = DateUtils.fillZero(hour);
selectedMinute = DateUtils.fillZero(minute);
}
}
public void setOnWheelListener(OnWheelListener onWheelListener) {
this.onWheelListener = onWheelListener;
}
public void setOnDateTimePickListener(OnDateTimePickListener listener) {
this.onDateTimePickListener = listener;
}
public String getSelectedYear() {
if (dateMode == YEAR_MONTH_DAY || dateMode == YEAR_MONTH) {
if (years.size() <= selectedYearIndex) {
selectedYearIndex = years.size() - 1;
}
return years.get(selectedYearIndex);
}
return "";
}
public String getSelectedMonth() {
if (dateMode != NONE) {
if (months.size() <= selectedMonthIndex) {
selectedMonthIndex = months.size() - 1;
}
return months.get(selectedMonthIndex);
}
return "";
}
public String getSelectedDay() {
if (dateMode == YEAR_MONTH_DAY || dateMode == MONTH_DAY) {
if (days.size() <= selectedDayIndex) {
selectedDayIndex = days.size() - 1;
}
return days.get(selectedDayIndex);
}
return "";
}
public String getSelectedHour() {
if (timeMode != NONE) {
return selectedHour;
}
return "";
}
public String getSelectedMinute() {
if (timeMode != NONE) {
return selectedMinute;
}
return "";
}
@NonNull
@Override
protected View makeCenterView() {
// 如果未设置默认项,则需要在此初始化数据
if ((dateMode == YEAR_MONTH_DAY || dateMode == YEAR_MONTH) && years.size() == 0) {
LogUtils.verbose(this, "init years before make view");
initYearData();
}
if (dateMode != NONE && months.size() == 0) {
LogUtils.verbose(this, "init months before make view");
int selectedYear = DateUtils.trimZero(getSelectedYear());
changeMonthData(selectedYear);
}
if ((dateMode == YEAR_MONTH_DAY || dateMode == MONTH_DAY) && days.size() == 0) {
LogUtils.verbose(this, "init days before make view");
int selectedYear;
if (dateMode == YEAR_MONTH_DAY) {
selectedYear = DateUtils.trimZero(getSelectedYear());
} else {
selectedYear = Calendar.getInstance(Locale.CHINA).get(Calendar.YEAR);
}
int selectedMonth = DateUtils.trimZero(getSelectedMonth());
changeDayData(selectedYear, selectedMonth);
}
if (timeMode != NONE && hours.size() == 0) {
LogUtils.verbose(this, "init hours before make view");
initHourData();
}
if (timeMode != NONE && minutes.size() == 0) {
LogUtils.verbose(this, "init minutes before make view");
changeMinuteData(DateUtils.trimZero(selectedHour));
}
LinearLayout layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setGravity(Gravity.CENTER);
final WheelView yearView = createWheelView();
final WheelView monthView = createWheelView();
final WheelView dayView = createWheelView();
final WheelView hourView = createWheelView();
final WheelView minuteView = createWheelView();
yearView.setTextSize(textSize);
monthView.setTextSize(textSize);
dayView.setTextSize(textSize);
hourView.setTextSize(textSize);
minuteView.setTextSize(textSize);
yearView.setUseWeight(useWeight);
monthView.setUseWeight(useWeight);
dayView.setUseWeight(useWeight);
hourView.setUseWeight(useWeight);
minuteView.setUseWeight(useWeight);
if (dateMode == YEAR_MONTH_DAY || dateMode == YEAR_MONTH) {
yearView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
yearView.setItems(years, selectedYearIndex);
//yearView.setLabel(yearLabel);
yearView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
@Override
public void onSelected(int index) {
selectedYearIndex = index;
String selectedYearStr = years.get(selectedYearIndex);
if (onWheelListener != null) {
onWheelListener.onYearWheeled(selectedYearIndex, selectedYearStr);
}
LogUtils.verbose(this, "change months after year wheeled");
selectedMonthIndex = 0;//重置月份索引
selectedDayIndex = 0;//重置日子索引
//需要根据年份及月份动态计算天数
int selectedYear = DateUtils.trimZero(selectedYearStr);
changeMonthData(selectedYear);
monthView.setItems(months, selectedMonthIndex);
if (onWheelListener != null) {
onWheelListener.onMonthWheeled(selectedMonthIndex, months.get(selectedMonthIndex));
}
changeDayData(selectedYear, DateUtils.trimZero(months.get(selectedMonthIndex)));
dayView.setItems(days, selectedDayIndex);
if (onWheelListener != null) {
onWheelListener.onDayWheeled(selectedDayIndex, days.get(selectedDayIndex));
}
}
});
layout.addView(yearView);
if (!TextUtils.isEmpty(yearLabel)) {
TextView labelView = createLabelView();
labelView.setTextSize(textSize);
labelView.setText(yearLabel);
layout.addView(labelView);
}
}
if (dateMode != NONE) {
monthView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
monthView.setItems(months, selectedMonthIndex);
//monthView.setLabel(monthLabel);
monthView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
@Override
public void onSelected(int index) {
selectedMonthIndex = index;
String selectedMonthStr = months.get(selectedMonthIndex);
if (onWheelListener != null) {
onWheelListener.onMonthWheeled(selectedMonthIndex, selectedMonthStr);
}
if (dateMode == YEAR_MONTH_DAY || dateMode == MONTH_DAY) {
LogUtils.verbose(this, "change days after month wheeled");
selectedDayIndex = 0;//重置日子索引
int selectedYear;
if (dateMode == YEAR_MONTH_DAY) {
selectedYear = DateUtils.trimZero(getSelectedYear());
} else {
selectedYear = Calendar.getInstance(Locale.CHINA).get(Calendar.YEAR);
}
changeDayData(selectedYear, DateUtils.trimZero(selectedMonthStr));
dayView.setItems(days, selectedDayIndex);
if (onWheelListener != null) {
onWheelListener.onDayWheeled(selectedDayIndex, days.get(selectedDayIndex));
}
}
}
});
layout.addView(monthView);
if (!TextUtils.isEmpty(monthLabel)) {
TextView labelView = createLabelView();
labelView.setTextSize(textSize);
labelView.setText(monthLabel);
layout.addView(labelView);
}
}
if (dateMode == YEAR_MONTH_DAY || dateMode == MONTH_DAY) {
dayView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
dayView.setItems(days, selectedDayIndex);
//dayView.setLabel(dayLabel);
dayView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
@Override
public void onSelected(int index) {
selectedDayIndex = index;
if (onWheelListener != null) {
onWheelListener.onDayWheeled(selectedDayIndex, days.get(selectedDayIndex));
}
}
});
layout.addView(dayView);
if (!TextUtils.isEmpty(dayLabel)) {
TextView labelView = createLabelView();
labelView.setTextSize(textSize);
labelView.setText(dayLabel);
layout.addView(labelView);
}
}
if (timeMode != NONE) {
hourView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
hourView.setItems(hours, selectedHour);
//hourView.setLabel(hourLabel);
hourView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
@Override
public void onSelected(int index) {
selectedHour = hours.get(index);
if (onWheelListener != null) {
onWheelListener.onHourWheeled(index, selectedHour);
}
LogUtils.verbose(this, "change minutes after hour wheeled");
changeMinuteData(DateUtils.trimZero(selectedHour));
minuteView.setItems(minutes, selectedMinute);
}
});
layout.addView(hourView);
if (!TextUtils.isEmpty(hourLabel)) {
TextView labelView = createLabelView();
labelView.setTextSize(textSize);
labelView.setText(hourLabel);
layout.addView(labelView);
}
minuteView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
minuteView.setItems(minutes, selectedMinute);
//minuteView.setLabel(minuteLabel);
minuteView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
@Override
public void onSelected(int index) {
selectedMinute = minutes.get(index);
if (onWheelListener != null) {
onWheelListener.onMinuteWheeled(index, selectedMinute);
}
}
});
layout.addView(minuteView);
if (!TextUtils.isEmpty(minuteLabel)) {
TextView labelView = createLabelView();
labelView.setTextSize(textSize);
labelView.setText(minuteLabel);
layout.addView(labelView);
}
}
return layout;
}
@Override
protected void onSubmit() {
if (onDateTimePickListener == null) {
return;
}
String year = getSelectedYear();
String month = getSelectedMonth();
String day = getSelectedDay();
String hour = getSelectedHour();
String minute = getSelectedMinute();
switch (dateMode) {
case YEAR_MONTH_DAY:
((OnYearMonthDayTimePickListener) onDateTimePickListener).onDateTimePicked(year, month, day, hour, minute);
break;
case YEAR_MONTH:
((OnYearMonthTimePickListener) onDateTimePickListener).onDateTimePicked(year, month, hour, minute);
break;
case MONTH_DAY:
((OnMonthDayTimePickListener) onDateTimePickListener).onDateTimePicked(month, day, hour, minute);
break;
case NONE:
((OnTimePickListener) onDateTimePickListener).onDateTimePicked(hour, minute);
break;
}
}
private int findItemIndex(ArrayList<String> items, int item) {
//折半查找有序元素的索引
int index = Collections.binarySearch(items, item, new Comparator<Object>() {
@Override
public int compare(Object lhs, Object rhs) {
String lhsStr = lhs.toString();
String rhsStr = rhs.toString();
lhsStr = lhsStr.startsWith("0") ? lhsStr.substring(1) : lhsStr;
rhsStr = rhsStr.startsWith("0") ? rhsStr.substring(1) : rhsStr;
return Integer.parseInt(lhsStr) - Integer.parseInt(rhsStr);
}
});
if (index < 0) {
throw new IllegalArgumentException("Item[" + item + "] out of range");
}
return index;
}
private void initYearData() {
years.clear();
if (startYear == endYear) {
years.add(String.valueOf(startYear));
} else if (startYear < endYear) {
//年份正序
for (int i = startYear; i <= endYear; i++) {
years.add(String.valueOf(i));
}
} else {
//年份逆序
for (int i = startYear; i >= endYear; i--) {
years.add(String.valueOf(i));
}
}
// if (dateMode == YEAR_MONTH_DAY || dateMode == YEAR_MONTH) {
// int index = years.indexOf(DateUtils.fillZero(Calendar.getInstance().get(Calendar.YEAR)));
// if (index == -1) {
// //当前设置的年份不在指定范围,则默认选中范围开始的年
// selectedYearIndex = 0;
// } else {
// selectedYearIndex = index;
// }
// }
}
private void changeMonthData(int selectedYear) {
// String preSelectMonth;
// if (months.size() > selectedMonthIndex) {
// preSelectMonth = months.get(selectedMonthIndex);
// } else {
// preSelectMonth = DateUtils.fillZero(Calendar.getInstance().get(Calendar.MONTH) + 1);
// }
// LogUtils.verbose(this, "preSelectMonth=" + preSelectMonth);
months.clear();
if (startMonth < 1 || endMonth < 1 || startMonth > 12 || endMonth > 12) {
throw new IllegalArgumentException("Month out of range [1-12]");
}
if (startYear == endYear) {
if (startMonth > endMonth) {
for (int i = endMonth; i >= startMonth; i--) {
months.add(DateUtils.fillZero(i));
}
} else {
for (int i = startMonth; i <= endMonth; i++) {
months.add(DateUtils.fillZero(i));
}
}
} else if (selectedYear == startYear) {
for (int i = startMonth; i <= 12; i++) {
months.add(DateUtils.fillZero(i));
}
} else if (selectedYear == endYear) {
for (int i = 1; i <= endMonth; i++) {
months.add(DateUtils.fillZero(i));
}
} else {
for (int i = 1; i <= 12; i++) {
months.add(DateUtils.fillZero(i));
}
}
// //当前设置的月份不在指定范围,则默认选中范围开始的月份
// int preSelectMonthIndex = months.indexOf(preSelectMonth);
// selectedMonthIndex = preSelectMonthIndex == -1 ? 0 : preSelectMonthIndex;
}
private void changeDayData(int selectedYear, int selectedMonth) {
int maxDays = DateUtils.calculateDaysInMonth(selectedYear, selectedMonth);
// if (selectedDayIndex >= maxDays) {
// //如果之前选择的日是之前年月的最大日,则日自动为该年月的最大日
// selectedDayIndex = maxDays - 1;
// }
// String preSelectDay;
// if (days.size() > selectedDayIndex) {
// //年或月变动时,保持之前选择的日不动
// preSelectDay = days.get(selectedDayIndex);
// } else {
// preSelectDay = DateUtils.fillZero(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
// }
// LogUtils.verbose(this, "maxDays=" + maxDays + ", preSelectDay=" + preSelectDay);
days.clear();
if (selectedYear == startYear && selectedMonth == startMonth
&& selectedYear == endYear && selectedMonth == endMonth) {
//开始年月及结束年月相同情况
for (int i = startDay; i <= endDay; i++) {
days.add(DateUtils.fillZero(i));
}
} else if (selectedYear == startYear && selectedMonth == startMonth) {
//开始年月相同情况
for (int i = startDay; i <= maxDays; i++) {
days.add(DateUtils.fillZero(i));
}
} else if (selectedYear == endYear && selectedMonth == endMonth) {
//结束年月相同情况
for (int i = 1; i <= endDay; i++) {
days.add(DateUtils.fillZero(i));
}
} else {
for (int i = 1; i <= maxDays; i++) {
days.add(DateUtils.fillZero(i));
}
}
// //当前设置的日子不在指定范围,则默认选中范围开始的日子
// int preSelectDayIndex = days.indexOf(preSelectDay);
// selectedDayIndex = preSelectDayIndex == -1 ? 0 : preSelectDayIndex;
}
private void initHourData() {
// int currentHour;
// if (timeMode == HOUR_24) {
// currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
// } else {
// currentHour = Calendar.getInstance().get(Calendar.HOUR);
// }
for (int i = startHour; i <= endHour; i++) {
String hour = DateUtils.fillZero(i);
// if (i == currentHour) {
// selectedHour = hour;
// }
hours.add(hour);
}
if (hours.indexOf(selectedHour) == -1) {
//当前设置的小时不在指定范围,则默认选中范围开始的小时
selectedHour = hours.get(0);
}
// selectedMinute = DateUtils.fillZero(Calendar.getInstance().get(Calendar.MINUTE));
}
private void changeMinuteData(int selectedHour) {
if (startHour == endHour) {
if (startMinute > endMinute) {
int temp = startMinute;
startMinute = endMinute;
endMinute = temp;
}
for (int i = startMinute; i <= endMinute; i++) {
minutes.add(DateUtils.fillZero(i));
}
} else if (selectedHour == startHour) {
for (int i = startMinute; i <= 59; i++) {
minutes.add(DateUtils.fillZero(i));
}
} else if (selectedHour == endHour) {
for (int i = 0; i <= endMinute; i++) {
minutes.add(DateUtils.fillZero(i));
}
} else {
for (int i = 0; i <= 59; i++) {
minutes.add(DateUtils.fillZero(i));
}
}
if (minutes.indexOf(selectedMinute) == -1) {
//当前设置的分钟不在指定范围,则默认选中范围开始的分钟
selectedMinute = minutes.get(0);
}
}
public interface OnWheelListener {
void onYearWheeled(int index, String year);
void onMonthWheeled(int index, String month);
void onDayWheeled(int index, String day);
void onHourWheeled(int index, String hour);
void onMinuteWheeled(int index, String minute);
}
protected interface OnDateTimePickListener {
}
public interface OnYearMonthDayTimePickListener extends OnDateTimePickListener {
void onDateTimePicked(String year, String month, String day, String hour, String minute);
}
public interface OnYearMonthTimePickListener extends OnDateTimePickListener {
void onDateTimePicked(String year, String month, String hour, String minute);
}
/**
* @deprecated use {@link OnYearMonthTimePickListener} instead
*/
@Deprecated
public interface OnYearMonthPickListener extends OnYearMonthTimePickListener {
}
public interface OnMonthDayTimePickListener extends OnDateTimePickListener {
void onDateTimePicked(String month, String day, String hour, String minute);
}
/**
* @deprecated use {@link OnMonthDayTimePickListener} instead
*/
@Deprecated
public interface OnMonthDayPickListener extends OnMonthDayTimePickListener {
}
public interface OnTimePickListener extends OnDateTimePickListener {
void onDateTimePicked(String hour, String minute);
}
}