/** * 自定义日期时间选择器视图。 */ public class DateTimePicker extends FrameLayout { // 类成员变量和常量定义 private static final boolean DEFAULT_ENABLE_STATE = true; private static final int HOURS_IN_HALF_DAY = 12; // ... 其他常量定义 // 日期时间选择器的组件 private final NumberPicker mDateSpinner; private final NumberPicker mHourSpinner; private final NumberPicker mMinuteSpinner; private final NumberPicker mAmPmSpinner; private Calendar mDate; // 日期显示值数组 private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; // AM/PM标志 private boolean mIsAm; // 是否为24小时视图 private boolean mIs24HourView; // 启用状态 private boolean mIsEnabled = DEFAULT_ENABLE_STATE; // 初始化标志 private boolean mInitialising; // 日期时间改变监听器 private OnDateTimeChangedListener mOnDateTimeChangedListener; // NumberPicker值改变监听器 private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { // 日期改变时的处理逻辑 } }; // ... 其他监听器定义 /** * 定义日期时间改变监听器接口。 */ public interface OnDateTimeChangedListener { void onDateTimeChanged(DateTimePicker view, int year, int month, int dayOfMonth, int hourOfDay, int minute); } /** * 构造函数。 */ public DateTimePicker(Context context) { // ... 实现代码 } /** * 设置当前日期。 * @param date 长整型日期值。 */ public void setCurrentDate(long date) { // ... 实现代码 } /** * 获取当前年份。 * @return 当前年份。 */ public int getCurrentYear() { // ... 实现代码 } // ... 其他日期时间组件的getter和setter方法 /** * 设置是否为24小时视图。 * @param is24HourView 是否为24小时视图。 */ public void set24HourView(boolean is24HourView) { // ... 实现代码 } /** * 设置日期时间改变监听器。 * @param callback 监听器回调。 */ public void setOnDateTimeChangedListener(OnDateTimeChangedListener callback) { // ... 实现代码 } private void onDateTimeChanged() { // 通知监听器日期时间改变 } }