|
|
|
@ -29,8 +29,8 @@ import android.widget.FrameLayout;
|
|
|
|
|
import android.widget.NumberPicker;
|
|
|
|
|
|
|
|
|
|
public class DateTimePicker extends FrameLayout {
|
|
|
|
|
//FrameLayout是布局模板之一
|
|
|
|
|
//所有的子元素全部在屏幕的右上方
|
|
|
|
|
//FrameLayout是布局模板之一
|
|
|
|
|
//所有的子元素全部在屏幕的右上方
|
|
|
|
|
private static final boolean DEFAULT_ENABLE_STATE = true;
|
|
|
|
|
|
|
|
|
|
private static final int HOURS_IN_HALF_DAY = 12;
|
|
|
|
@ -55,7 +55,6 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
//这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午)
|
|
|
|
|
private Calendar mDate;
|
|
|
|
|
//定义了Calendar类型的变量mDate,用于操作时间
|
|
|
|
|
|
|
|
|
|
private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK];
|
|
|
|
|
|
|
|
|
|
private boolean mIsAm;
|
|
|
|
@ -79,7 +78,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
//将现在日期的值传递给mDate;updateDateControl是同步操作
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
//这里是对小时(Hour) 的监听
|
|
|
|
|
//这里是对 小时(Hour) 的监听
|
|
|
|
|
@Override
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
boolean isDateChanged = false;
|
|
|
|
@ -113,7 +112,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
cal.add(Calendar.DAY_OF_YEAR, -1);
|
|
|
|
|
isDateChanged = true;
|
|
|
|
|
}
|
|
|
|
|
}//这里是对于12小时制时,凌晨11点和12点交替时对日期的更改
|
|
|
|
|
} //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改
|
|
|
|
|
int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY);
|
|
|
|
|
//通过数字选择器对newHour的赋值
|
|
|
|
|
mDate.set(Calendar.HOUR_OF_DAY, newHour);
|
|
|
|
@ -129,7 +128,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
//对分钟(Minute)改变的监听
|
|
|
|
|
//这里是对 分钟(Minute)改变的监听
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
int minValue = mMinuteSpinner.getMinValue();
|
|
|
|
|
int maxValue = mMinuteSpinner.getMaxValue();
|
|
|
|
@ -246,7 +245,9 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
mAmPmSpinner.setEnabled(enabled);
|
|
|
|
|
mIsEnabled = enabled;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//存在疑问!!!!!!!!!!!!!setEnabled的作用
|
|
|
|
|
//下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断
|
|
|
|
|
//下面的各函数主要是对上面代码引用到的各函数功能的实现
|
|
|
|
|
@Override
|
|
|
|
|
public boolean isEnabled() {
|
|
|
|
|
return mIsEnabled;
|
|
|
|
@ -259,7 +260,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*/
|
|
|
|
|
public long getCurrentDateInTimeMillis() {
|
|
|
|
|
return mDate.getTimeInMillis();
|
|
|
|
|
}
|
|
|
|
|
}//实现函数——得到当前的秒数
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the current date
|
|
|
|
@ -271,7 +272,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
cal.setTimeInMillis(date);
|
|
|
|
|
setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH),
|
|
|
|
|
cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE));
|
|
|
|
|
}
|
|
|
|
|
}//实现函数功能——设置当前的时间,参数是date
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Set the current date
|
|
|
|
@ -296,6 +297,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @return The current year
|
|
|
|
|
*/
|
|
|
|
|
//下面是得到year、month、day等值
|
|
|
|
|
public int getCurrentYear() {
|
|
|
|
|
return mDate.get(Calendar.YEAR);
|
|
|
|
|
}
|
|
|
|
@ -452,7 +454,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
updateHourControl();
|
|
|
|
|
setCurrentHour(hour);
|
|
|
|
|
updateAmPmControl();
|
|
|
|
|
}//对于星期几的算法
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateDateControl() {
|
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
@ -466,7 +468,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
mDateSpinner.setDisplayedValues(mDateDisplayValues);
|
|
|
|
|
mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2);
|
|
|
|
|
mDateSpinner.invalidate();
|
|
|
|
|
}//对于上下午操作的算法
|
|
|
|
|
}// 对于星期几的算法
|
|
|
|
|
|
|
|
|
|
private void updateAmPmControl() {
|
|
|
|
|
if (mIs24HourView) {
|
|
|
|
@ -475,7 +477,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
int index = mIsAm ? Calendar.AM : Calendar.PM;
|
|
|
|
|
mAmPmSpinner.setValue(index);
|
|
|
|
|
mAmPmSpinner.setVisibility(View.VISIBLE);
|
|
|
|
|
}
|
|
|
|
|
}// 对于上下午操作的算法
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateHourControl() {
|
|
|
|
@ -485,7 +487,7 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
} else {
|
|
|
|
|
mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW);
|
|
|
|
|
mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW);
|
|
|
|
|
}
|
|
|
|
|
}// 对与小时的算法
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|