Skip to content

Commit f372f2f

Browse files
Merge pull request #365 from FuHeJian/master
1.毫秒设置成1000,实际上获取出来的时间是下个月的1号0点,改为999,防止出现其他月份。
2 parents 51852c3 + c8f7bfe commit f372f2f

File tree

7 files changed

+549
-1
lines changed

7 files changed

+549
-1
lines changed

CalendarPicker/src/main/java/com/github/gzuliyujiang/calendarpicker/CalendarPicker.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import com.github.gzuliyujiang.calendarpicker.core.FestivalProvider;
3030
import com.github.gzuliyujiang.calendarpicker.core.ItemViewProvider;
3131
import com.github.gzuliyujiang.calendarpicker.core.OnDateSelectedListener;
32+
import com.github.gzuliyujiang.calendarpicker.listener.OnPageChangeCallback;
33+
import com.github.gzuliyujiang.calendarpicker.listener.ScrollEventAdapter;
3234
import com.github.gzuliyujiang.dialog.DialogConfig;
3335
import com.github.gzuliyujiang.dialog.DialogStyle;
3436
import com.github.gzuliyujiang.dialog.ModalDialog;
@@ -47,6 +49,7 @@
4749
public class CalendarPicker extends ModalDialog implements OnDateSelectedListener {
4850
private CalendarView calendarView;
4951
private CalendarAdapter calendarAdapter;
52+
private ScrollEventAdapter mScrollEventAdapter;
5053
private ColorScheme colorScheme;
5154
private boolean singleMode = false;
5255
private FestivalProvider festivalProvider;
@@ -104,8 +107,26 @@ protected void initData() {
104107
maxCalendar.set(Calendar.DAY_OF_MONTH, DateUtils.maxDaysOfMonth(maxCalendar.getTime()));
105108
maxDate = maxCalendar.getTime();
106109
}
110+
if (mScrollEventAdapter == null) {
111+
mScrollEventAdapter = new ScrollEventAdapter(calendarView.getBodyView());
112+
calendarView.getBodyView().addOnScrollListener(mScrollEventAdapter);
113+
}
107114
calendarAdapter = calendarView.getAdapter();
108115
calendarAdapter.setOnCalendarSelectedListener(this);
116+
mScrollEventAdapter.setOnPageChangeCallback(new OnPageChangeCallback() {
117+
@Override
118+
public void onPageSelected(int position) {
119+
if (calendarAdapter != null) {
120+
Date cDate = calendarAdapter.getDateValue(position);
121+
if (onSingleDatePickListener != null) {
122+
onSingleDatePickListener.onMonthChanged(cDate);
123+
}
124+
if (onRangeDatePickListener != null) {
125+
onRangeDatePickListener.onMonthChanged(cDate);
126+
}
127+
}
128+
}
129+
});
109130
refreshData();
110131
}
111132

@@ -331,4 +352,14 @@ public final CalendarView getCalendarView() {
331352
return calendarView;
332353
}
333354

355+
@Override
356+
public void onDetachedFromWindow() {
357+
super.onDetachedFromWindow();
358+
if (mScrollEventAdapter != null && calendarView != null) {
359+
mScrollEventAdapter.setOnPageChangeCallback(null);
360+
calendarView.getBodyView().removeOnScrollListener(mScrollEventAdapter);
361+
mScrollEventAdapter = null;
362+
}
363+
}
364+
334365
}

CalendarPicker/src/main/java/com/github/gzuliyujiang/calendarpicker/OnRangeDatePickListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ public interface OnRangeDatePickListener {
2525

2626
void onRangeDatePicked(@NonNull Date startDate, @NonNull Date endDate);
2727

28+
void onMonthChanged(Date date);
29+
2830
}

CalendarPicker/src/main/java/com/github/gzuliyujiang/calendarpicker/OnSingleDatePickListener.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ public interface OnSingleDatePickListener {
2525

2626
void onSingleDatePicked(@NonNull Date date);
2727

28+
void onMonthChanged(Date date);
29+
2830
}

CalendarPicker/src/main/java/com/github/gzuliyujiang/calendarpicker/core/CalendarAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ public final int getDatePosition(Date date) {
275275
maxDate.set(Calendar.HOUR_OF_DAY, 23);
276276
maxDate.set(Calendar.MINUTE, 59);
277277
maxDate.set(Calendar.SECOND, 59);
278-
maxDate.set(Calendar.MILLISECOND, 1000);
278+
maxDate.set(Calendar.MILLISECOND, 999);
279279
if (time >= minDate.getTime().getTime() && time <= maxDate.getTime().getTime()) {
280280
return i;
281281
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.github.gzuliyujiang.calendarpicker.listener;
2+
3+
import androidx.annotation.Px;
4+
5+
public abstract class OnPageChangeCallback {
6+
/**
7+
* This method will be invoked when the current page is scrolled, either as part
8+
* of a programmatically initiated smooth scroll or a user initiated touch scroll.
9+
*
10+
* @param position Position index of the first page currently being displayed.
11+
* Page position+1 will be visible if positionOffset is nonzero.
12+
* @param positionOffset Value from [0, 1) indicating the offset from the page at position.
13+
* @param positionOffsetPixels Value in pixels indicating the offset from position.
14+
*/
15+
public void onPageScrolled(int position, float positionOffset,
16+
@Px int positionOffsetPixels) {
17+
}
18+
19+
/**
20+
* This method will be invoked when a new page becomes selected. Animation is not
21+
* necessarily complete.
22+
*
23+
* @param position Position index of the new selected page.
24+
*/
25+
public void onPageSelected(int position) {
26+
}
27+
28+
/**
29+
* Called when the scroll state changes. Useful for discovering when the user begins
30+
* dragging, when a fake drag is started, when the pager is automatically settling to the
31+
* current page, or when it is fully stopped/idle. {@code state} can be one of {@link
32+
*/
33+
public void onPageScrollStateChanged(int state) {
34+
}
35+
}

0 commit comments

Comments
 (0)